Xaraya / Postnuke CVS Notices - Message

Note: this list is kept only as a demonstration for CVSNotice. For the latest CVS notices, see the Xaraya and Postnuke sites

View Statistics - Next Notice - Previous Notice

Directory filter : [ all ] / postnuke_official / html / modules / template [ view in CVS ]

Date Directory [filter] File(s) [view] Author [filter]
01 Aug 2002 21:10:53postnuke_official/html/modules/templatepnadmin.php,1.15,1.16 pninit.php,1.11,1.12 pnuserapi.php,1.7,1.8Mike
 add support for short URLs

Update of /home/cvsroot/postnuke_official/html/modules/template
In directory ns7.hostnuke.net:/tmp/cvs-serv5598

Modified Files:
	pnadmin.php pninit.php pnuserapi.php 
Log Message:
add support for short URLs


Index: pnadmin.php
===================================================================
RCS file: /home/cvsroot/postnuke_official/html/modules/template/pnadmin.php,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** pnadmin.php	28 Jul 2002 13:24:12 -0000	1.15
--- pnadmin.php	1 Aug 2002 21:10:51 -0000	1.16
***************
*** 619,627 ****
      //$menu = template_admin_menu('modifyconfig');
  
!     $checked = pnModGetVar('template','bold') ? 'checked' : '';
      // Return the template variables defined in this function
      return array('authid' => pnSecGenAuthKey(),
                   'boldlabel' => pnVarPrepForDisplay(_TEMPLATEDISPLAYBOLD),
!                  'boldchecked' => $checked,
                   'itemslabel' => pnVarPrepForDisplay(_TEMPLATEITEMSPERPAGE),
                   'itemsvalue' => pnModGetVar('template', 'itemsperpage'),
--- 619,631 ----
      //$menu = template_admin_menu('modifyconfig');
  
!     $boldchecked = pnModGetVar('template','bold') ? 'checked' : '';
!     $shorturlschecked = pnModGetVar('template','SupportShortURLs') ? 'checked'
!                        : '';
      // Return the template variables defined in this function
      return array('authid' => pnSecGenAuthKey(),
                   'boldlabel' => pnVarPrepForDisplay(_TEMPLATEDISPLAYBOLD),
!                  'boldchecked' => $boldchecked,
!                  'shorturlslabel' => pnML('Enable short URLs'),
!                  'shorturlschecked' => $shorturlschecked,
                   'itemslabel' => pnVarPrepForDisplay(_TEMPLATEITEMSPERPAGE),
                   'itemsvalue' => pnModGetVar('template', 'itemsperpage'),
***************
*** 640,645 ****
      // assumptions that will not hold in future versions of PostNuke
      list($bold,
!          $itemsperpage) = pnVarCleanFromInput('bold',
!                                               'itemsperpage');
  
      // Confirm authorisation code.  This checks that the form had a valid
--- 644,651 ----
      // assumptions that will not hold in future versions of PostNuke
      list($bold,
!          $itemsperpage,
!          $shorturls) = pnVarCleanFromInput('bold',
!                                            'itemsperpage',
!                                            'shorturls');
  
      // Confirm authorisation code.  This checks that the form had a valid
***************
*** 668,671 ****
--- 674,682 ----
      }
      pnModSetVar('template', 'itemsperpage', $itemsperpage);
+ 
+     if (!isset($shorturls)) {
+         $shorturls = 0;
+     }
+     pnModSetVar('template', 'SupportShortURLs', $shorturls);
  
      // This function generated no output, and so now it is complete we redirect

Index: pninit.php
===================================================================
RCS file: /home/cvsroot/postnuke_official/html/modules/template/pninit.php,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** pninit.php	28 Jul 2002 13:22:04 -0000	1.11
--- pninit.php	1 Aug 2002 21:10:51 -0000	1.12
***************
*** 118,146 ****
      // module master category cid and child subcids
      if(pnModAvailable('categories') && pnModAPILoad('categories', 'admin'))
! 	{
!             $templatecid = pnModAPIFunc('categories',
!                                         'admin', 
!                                         'create', 
!                                         Array('name' => 'examples',
!                                               'description' => 'Example Categories',
!                                               'parent_id' => 0));
!             pnModSetVar('template', 'mastercid', $templatecid);
!             $templatecategories = array();
!             $templatecategories[] = array('name' => "one",
!                                           'description' => "description one");
!             $templatecategories[] = array('name' => "two",
!                                           'description' => "description two");
!             $templatecategories[] = array('name' => "three",
!                                           'description' => "description three");
!             foreach($templatecategories as $subcat)
!             {
!                 $templatesubcid = pnModAPIFunc('categories',
!                                                'admin', 
!                                                'create', 
!                                                Array('name' => $subcat['name'],
!                                                      'description' => $subcat['description'],
!                                                      'parent_id' => $templatecid));
          }
- 
      }
  
--- 118,147 ----
      // module master category cid and child subcids
      if(pnModAvailable('categories') && pnModAPILoad('categories', 'admin'))
!     {
!         $templatecid = pnModAPIFunc('categories',
!                                     'admin', 
!                                     'create', 
!                                     Array('name' => 'examples',
!                                           'description' => 'Example Categories',
!                                           'parent_id' => 0));
!         // Note: you can have more than 1 mastercid (cfr. articles module)
!         pnModSetVar('template', 'mastercid', $templatecid);
!         $templatecategories = array();
!         $templatecategories[] = array('name' => "one",
!                                       'description' => "description one");
!         $templatecategories[] = array('name' => "two",
!                                       'description' => "description two");
!         $templatecategories[] = array('name' => "three",
!                                       'description' => "description three");
!         foreach($templatecategories as $subcat)
!         {
!             $templatesubcid = pnModAPIFunc('categories',
!                                            'admin', 
!                                            'create', 
!                                            Array('name' => $subcat['name'],
!                                                  'description' =>
!                                                      $subcat['description'],
!                                                  'parent_id' => $templatecid));
          }
      }
  
***************
*** 152,155 ****
--- 153,160 ----
      pnModSetVar('template', 'bold', 0);
      pnModSetVar('template', 'itemsperpage', 10);
+ 
+     // If your module supports short URLs, the website administrator should
+     // be able to turn it on or off in your module administration
+     pnModSetVar('template', 'SupportShortURLs', 0);
  
      // Initialisation successful

Index: pnuserapi.php
===================================================================
RCS file: /home/cvsroot/postnuke_official/html/modules/template/pnuserapi.php,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** pnuserapi.php	1 Aug 2002 15:05:20 -0000	1.7
--- pnuserapi.php	1 Aug 2002 21:10:51 -0000	1.8
***************
*** 290,292 ****
--- 290,513 ----
  }
  
+ /*
+  * Support for short URLs (user functions)
+  *
+  * The following two functions encode module parameters into some
+  * virtual path that will be added to index.php, and decode a virtual
+  * path back to the original module parameters.
+  *
+  * The result is that people (and search engines) can use URLs like :
+  *
+  * - http://mysite.com/index.php/template/ (main function)
+  * - http://mysite.com/index.php/template/list.html (view function)
+  * - http://mysite.com/index.php/template/123.html (display function)
+  *
+  * in addition to the 'normal' PostNuke URLs that look like :
+  *
+  * - http://mysite.com/index.php?module=template&func=display&tid=123
+  *
+  * You can also combine the two, e.g. for less frequently-used parameters :
+  *
+  * - http://mysite.com/index.php/template/list.html?startnum=21
+  *
+  *
+  * Module developers who wish to support this feature are strongly
+  * recommended to create virtual paths that are 'semantically meaningful',
+  * so that people navigating in your module can understand at a glance what
+  * the short URLs mean, and how they could e.g. display item 234 simply
+  * by changing the 123.html into 234.html.
+  *
+  * For older modules with many different optional parameters and functions,
+  * this generally implies re-thinking which parameters could easily be set
+  * to some default to cover the most frequently-used cases, and rethinking
+  * how each function could be represented inside some "virtual directory
+  * structure". E.g. .../archive/2002/05/, .../forums/12/345.html, ../recent.html
+  * or .../<categoryname>/123.html
+  *
+  * The same kind of encoding/decoding can be done for admin functions as well,
+  * except that by default, the URLs will start with index.php/admin/template.
+  * The encode/decode functions for admin functions are in pnadminapi.php.
+  *
+  */
+ 
+ /**
+  * return the path for a short URL to pnModURL for this module
+  * @param $args the function and arguments passed to pnModURL
+  * @returns string
+  * @return path to be added to index.php for a short URL, or empty if failed
+  */
+ function template_userapi_encode_shorturl($args)
+ {
+     // Get arguments from argument array
+     extract($args);
+ 
+     // Check if we have something to work with
+     if (!isset($func)) {
+         return;
+     }
+ 
+     // Note : make sure you don't pass the following variables as arguments in
+     // your module too - adapt here if necessary
+ 
+     // default path is empty -> no short URL
+     $path = '';
+     // if we want to add some common arguments as URL parameters below
+     $join = '?';
+     // we can't rely on pnModGetName() here -> you must specify the modname !
+     $module = 'template';
+ 
+     // specify some short URLs relevant to your module
+     if ($func == 'main') {
+         $path = '/' . $module . '/';
+ 
+         // Note : if your main function calls some other function by default,
+         // you should set the path to directly to that other function
+ 
+     } elseif ($func == 'view') {
+         $path = '/' . $module . '/list.html';
+ 
+         // we'll add the optional $startnum parameter below, as a regular
+         // URL parameter
+ 
+         // you might have some additional parameter that you want to use to
+         // create different virtual paths here - for example a category name
+         // if (!empty($cid) && is_numeric($cid)) {
+         //     // use a cache to avoid re-querying for each URL in the same cat
+         //     static $catcache = array();
+         //     if (pnModAPILoad('categories','user')) {
+         //         if (isset($catcache[$cid])) {
+         //             $cat = $catcache[$cid];
+         //         } else {
+         //             $cat = pnModAPIFunc('categories','user','getcatinfo',
+         //                                 array('cid' => $cid));
+         //             // put the category in cache
+         //             $catcache[$cid] = $cat;
+         //         }
+         //         if (!empty($cat) && !empty($cat['name'])) {
+         //             // use the category name as part of the path here
+         //             $path = '/' . $module . '/' . rawurlencode($cat['name']);
+         //         }
+         //     }
+         // }
+ 
+         // if you have some additional parameters that you want to keep as
+         // regular URL parameters - example for an array :
+         // if (isset($other) && is_array($other) && count($other) > 0) {
+         //     foreach ($other as $id => $val) {
+         //        $path .= $join . 'other['.$id.']='.$val;
+         //        // change the join character (once would be enough)
+         //        $join = '&';
+         //     }
+         // }
+ 
+     } elseif ($func == 'display') {
+         // check for required parameters
+         if (isset($tid) && is_numeric($tid)) {
+             $path = '/' . $module . '/' . $tid . '.html';
+ 
+             // you might have some additional parameter that you want to use to
+             // create different virtual paths here - for example a category name
+             // See above for an example...
+ 
+         } else {
+             // we don't know how to handle that -> don't create a path here
+ 
+             // Note : this generally means that someone tried to create a
+             // link to your module, but used invalid parameters for pnModURL
+             // -> you might want to provide a default path to return to
+             // $path = '/' . $module . '/list.html';
+         }
+ 
+     } else {
+         // anything else that you haven't defined a short URL equivalent for
+         // -> don't create a path here
+     }
+ 
+     // add some other module arguments as standard URL parameters
+     if (!empty($path) && isset($startnum)) {
+         $path .= $join . 'startnum=' . $startnum;
+     }
+ 
+     return $path;
+ }
+ 
+ /**
+  * extract function and arguments from short URLs for this module, and pass
+  * them back to pnGetRequestInfo()
+  * @param $params array containing the different elements of the virtual path
+  * @returns array
+  * @return array containing func the function to be called and args the query
+  *         string arguments, or empty if it failed
+  */
+ function template_userapi_decode_shorturl($params)
+ {
+     // Initialise the argument list we will return
+     $args = array();
+ 
+     // Analyse the different parts of the virtual path
+     // $params[1] contains the first part after index.php/template
+ 
+     // In general, you should be strict in encoding URLs, but as liberal
+     // as possible in trying to decode them...
+ 
+     if (empty($params[1])) {
+         // nothing specified -> we'll go to the main function
+         return array('main', $args);
+ 
+     } elseif (preg_match('/^index/i',$params[1])) {
+         // some search engine/someone tried using index.html (or similar)
+         // -> we'll go to the main function
+         return array('main', $args);
+ 
+     } elseif (preg_match('/^list/i',$params[1])) {
+         // something that starts with 'list' is probably for the view function
+         // Note : make sure your encoding/decoding is consistent ! :-)
+         return array('view', $args);
+ 
+     } elseif (preg_match('/^(\d+)/',$params[1],$matches)) {
+         // something that starts with a number must be for the display function
+         // Note : make sure your encoding/decoding is consistent ! :-)
+         $tid = $matches[1];
+         $args['tid'] = $tid;
+         return array('display', $args);
+ 
+     } else {
+         // the first part might be something variable like a category name
+         // In order to match that, you'll have to retrieve all relevant
+         // categories for this module, and compare against them...
+         // $cid = pnModGetVar('template','mastercid');
+         // if (pnModAPILoad('categories','user')) {
+         //     $cats = pnModAPIFunc('categories',
+         //                          'user',
+         //                          'getcat',
+         //                          array('cid' => $cid,
+         //                                'return_itself' => true,
+         //                                'getchildren' => true));
+         //     // lower-case for fanciful search engines/people
+         //     $params[1] = strtolower($params[1]);
+         //     $foundcid = 0;
+         //     foreach ($cats as $cat) {
+         //         if ($params[1] == strtolower($cat['name'])) {
+         //             $foundcid = $cat['cid'];
+         //             break;
+         //         }
+         //     }
+         //     // check if we found a matching category
+         //     if (!empty($foundcid)) {
+         //         $args['cid'] = $foundcid;
+         //         // TODO: now analyse $params[2] for index, list, \d+ etc.
+         //         // and return array('whatever', $args);
+         //     }
+         // }
+ 
+         // we have no idea what this virtual path could be, so we'll just
+         // forget about trying to decode this thing
+ 
+         // you *could* return the main function here if you want to
+         // return array('main', $args);
+     }
+ 
+     // default : return nothing -> no short URL decoded
+ }
+ 
  ?>


Directory filter : [ all ] / postnuke_official / html / modules / template [ view in CVS ]

View Statistics - Next Notice - Previous Notice


Visit Developer Site - Browse CVS Repository Syndicate via backend.rss
(max. once per hour please)
Powered by CVSNotice 0.1.3