Pager -> Weiterleitung auf die richtige Seite

Hier finden sich Fragen und Ergänzung zur Dokumentation. // All questions and discussions about the documentation.
Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Pager -> Weiterleitung auf die richtige Seite

Beitrag von Well » 14.08.2010, 14:55:36

Hey,

wie kann ich mit dem Pagermodul ermitteln, auf welcher Seite sich ein bestimmter Eintrag befindet?

Mir geht es darum, dass ich nach dem Erstellen eines neuen Eintrags auf die entsprechende Seite weiterleiten möchte. Die Seite hängt dabei u. a. von der Priorität des Eintrags ab, weswegen es nicht reicht, immer auf die erste bzw. letzte Seite weiterzuleiten. Eine Methode alâ "getPageByEntry" liefert das PagerModul nicht, was gäbe es für Möglichkeiten, das sauber zu lösen?

Wäre es möglich/sauber, das Modul durch Wrapping o. ä. um die entsprechende Methode(n) zu erweitern?

Benutzeravatar
dr.e.
Administrator
Beiträge: 4605
Registriert: 04.11.2007, 16:13:53

Re: Pager -> Weiterleitung auf die richtige Seite

Beitrag von dr.e. » 14.08.2010, 16:47:38

Hey Well,

in der aktuellen Implementierung liefert dir der Pager das nicht, er kennt den Mechanismus nicht. Um das zu evaluieren müsste man zunächst auch eine komplette Liste der Einträge (wenigstens die IDs) erzeugen und dann nach der ID suchen. Dabei ist die aktuelle Seitengröße und die Sortierung relevant. Eine andere Lösung fällt mir ad hoc nicht ein, weil sowohl Sortierung, Seitengröße als aktuelle Seite können ja dynamisch sein.

Um welche Sortierung handelt es sich da? Sofern das eine Sortierung nach Buchstaben ist, ließe sich das einigermaßen einfach lösen.
Wäre es möglich/sauber, das Modul durch Wrapping o. ä. um die entsprechende Methode(n) zu erweitern?
Hier würde ich zu Wrappen tendieren (PagerManager), denn dieser ist für den Aufbau zuständig. Die Frage ist für mich aber vielmehr, ob das hinterher mit der oben beschriebenen Methode performant ist...
Viele Grüße,
Christian

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: Pager -> Weiterleitung auf die richtige Seite

Beitrag von Well » 14.08.2010, 18:07:34

Um welche Sortierung handelt es sich da? Sofern das eine Sortierung nach Buchstaben ist, ließe sich das einigermaßen einfach lösen.
Die Sortierung sollte flexibel sein, also so wie im Statement angegeben.

Ok, das ganze scheint so dann wirklich nicht sehr performant zu sein - Dann werde ich darauf wohl vorerst verzichten.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4605
Registriert: 04.11.2007, 16:13:53

Re: Pager -> Weiterleitung auf die richtige Seite

Beitrag von dr.e. » 15.08.2010, 22:42:41

Hi Well,

wie stellt sich der Anwendungsfall in der GUI denn dar? Könnte man vielleicht auch ein Layer mit dem neu hinzugefügten Entry einblenden. So bietest du eine Bestätigung, umgehst aber die Abfrage.
Viele Grüße,
Christian

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: Pager -> Weiterleitung auf die richtige Seite

Beitrag von Well » 16.08.2010, 16:50:39

Hey,

ich lasse nun eine Bestätigung anzeigen und leite dann auf die erste Seite weiter.

An anderen Stellen wäre es aber schön, wenn auch die Möglichkeit bestünde, auf die letzte Seite weiterzuleiten. Was wurde aus folgendem:
viewtopic.php?f=10&t=116&p=703&hilit=pager ?

Diese Erweiterung in Verbindung mit einer Methode, um die Anzahl der Seiten bei den in der Konfiguration eingestellten Einträge pro Seite zu ermitteln fände ich - in dieser Hinsicht - wesentlich flexibler als die aktuelle Umsetzung.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4605
Registriert: 04.11.2007, 16:13:53

Re: Pager -> Weiterleitung auf die richtige Seite

Beitrag von dr.e. » 16.08.2010, 23:24:48

Hallo Well,

das ist korrekt. Der PagerManager müsste dann folgende Methoden haben:
  • getPageCount()
  • getItemsPerPage()
  • getPermaLink()
Dann könntest du in deiner Applikation die Anzahl der Seiten abfragen und einen Pager-Link generieren. Würde das deinen Anwendungsfall unterstützen? Falls ja, können wir das in die Erweiterung des Pagers für 1.13 aufnehmen.
Viele Grüße,
Christian

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: Pager -> Weiterleitung auf die richtige Seite

Beitrag von Well » 16.08.2010, 23:48:21

dr.e. hat geschrieben:Dann könntest du in deiner Applikation die Anzahl der Seiten abfragen und einen Pager-Link generieren. Würde das deinen Anwendungsfall unterstützen? Falls ja, können wir das in die Erweiterung des Pagers für 1.13 aufnehmen.
Auf jeden Fall. :)

Benutzeravatar
dr.e.
Administrator
Beiträge: 4605
Registriert: 04.11.2007, 16:13:53

Re: Pager -> Weiterleitung auf die richtige Seite

Beitrag von dr.e. » 17.08.2010, 09:35:11

Hallo Well,

dann nehme ich das in die Roadmap auf.
Viele Grüße,
Christian

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: Pager -> Weiterleitung auf die richtige Seite

Beitrag von Well » 22.08.2010, 01:35:32

Hey,

ich habe nun mal versucht, das ganze selber umzusetzen.

PagerManager.php:

Code: Alles auswählen

<?php
   /**
   *  <!--
   *  This file is part of the adventure php framework (APF) published under
   *  http://adventure-php-framework.org.
   *
   *  The APF is free software: you can redistribute it and/or modify
   *  it under the terms of the GNU Lesser General Public License as published
   *  by the Free Software Foundation, either version 3 of the License, or
   *  (at your option) any later version.
   *
   *  The APF is distributed in the hope that it will be useful,
   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
   *  GNU Lesser General Public License for more details.
   *
   *  You should have received a copy of the GNU Lesser General Public License
   *  along with the APF. If not, see http://www.gnu.org/licenses/lgpl-3.0.txt.
   *  -->
   */

   import('tools::link','FrontcontrollerLinkHandler');
   import('tools::request','RequestHandler');
   import('modules::pager::biz','PagerPage');
   import('modules::pager::data','PagerMapper');

   /**
    * @package modules::pager::biz
    * @class PagerManager
    *
    * Represents a concrete pager.
    *
    * @author Christian Achatz
    * @version
    * Version 0.1, 06.08.2006<br />
    * Version 0.2, 14.08.2006 (Added new class variables)<br />
    * Version 0.3, 16.08.2006 (Added configuration for the count and entries statements)<br />
    * Version 0.4, 13.04.2007 (Added the possibility to add params from the application)<br />
    * Version 0.5, 25.01.2009 (Refactoring of the API, refactoring of the functionality)<br />
    */
   final class PagerManager extends APFObject {

      /**
       * @private
       * @since 0.5
       * Contains the current configuration.
       * @var string[]
       */
      private $__PagerConfig = null;


      /**
       * @private
       * Contains the desired anchor name.
       * @var string
       */
      private $__AnchorName = null;


      public function PagerManager(){
      }


      /**
      *  @public
      *
      *  Initializes the pager. Loads the desired config section.
      *
      *  @param string $initParam the name of the config section.
      *
      *  @author Christian Achatz
      *  @version
      *  Version 0.1, 06.08.2006<br />
      *  Version 0.2, 16.08.2006 (Added more params to be applied to the count statement)<br />
      *  Version 0.3, 29.03.2007 (Renamed to "init()" to support the ServiceManager)<br />
      *  Version 0.4, 30.03.2007 (Removed the old iniHandler component)<br />
      *  Version 0.5, 13.04.2007 (Enhanced the method, that the pager can be created using the fabric)<br />
      *  Version 0.6, 26.04.2008 (The statement params are now casted to int by default)<br />
      *  Version 0.7, 25.01.2009 (Complete redesign / refactoring due to pager design changes. Now the pager can be used together with the GenericORMapper)<br />
      */
      public function init($initParam){

         // initialize the config
         $config = &$this->__getConfiguration('modules::pager','pager');
         $this->__PagerConfig = $config->getSection($initParam);

         // translate the cache directive
         if(!isset($this->__PagerConfig['Pager.CacheInSession']) || $this->__PagerConfig['Pager.CacheInSession'] === 'false'){
            $this->__PagerConfig['Pager.CacheInSession'] = false;
          // end if
         }
         else{
            $this->__PagerConfig['Pager.CacheInSession'] = true;
          // end else
         }
		 
         // translate the allowing of dynamic entries per page
		 if(!isset($this->__PagerConfig['Pager.AllowDynamicEntriesPerPage']) || $this->__PagerConfig['Pager.AllowDynamicEntriesPerPage'] === 'false') {
			$this->__PagerConfig['Pager.AllowDynamicEntriesPerPage'] = false;
		  // end if
		 }
		 else{
			$this->__PagerConfig['Pager.AllowDynamicEntriesPerPage'] = true;
		  // end else
		 }
		 
       // end function
      }


      /**
      *  @private
      *
      *  Returns the statement params needed by the pager's data layer.
      *
      *  @param string[] $addStmtParams Additional statement parameters.
      *  @return string[] A list of default statement params.
      *
      *  @author Christian Achatz
      *  @version
      *  Version 0.1, 24.01.2009<br />
      */
      private function __getStatementParams($addStmtParams = array()){
		 if($this->__PagerConfig['Pager.AllowDynamicEntriesPerPage']){
			$entriesCount = (int)RequestHandler::getValue($this->__PagerConfig['Pager.ParameterCountName'],$this->__PagerConfig['Pager.EntriesPerPage']);
		 }
		 else{
			$entriesCount = (int)$this->__PagerConfig['Pager.EntriesPerPage'];
		 }
	  
         $defaultParams = array(
                                'Start' => (int)RequestHandler::getValue($this->__PagerConfig['Pager.ParameterPageName'],1)*$entriesCount-$entriesCount,
                                'EntriesCount' => $entriesCount
                               );
         return array_merge($defaultParams,$this->__generateStatementParams($this->__PagerConfig['Pager.EntriesStatement.Params']),$addStmtParams);
       // end function
      }


      /**
      *  @public
      *
      *  Loads the ids of the entries of the current page.
      *
      *  @param string[] $addStmtParams additional statement parameters.
      *  @return int[] List of entry ids for the current page.
      *
      *  @author Christian Achatz
      *  @version
      *  Version 0.1, 05.08.2006<br />
      *  Version 0.2, 06.08.2006<br />
      *  Version 0.3, 16.08.2006 (Added the enhanced param configuration opportunity)<br />
      *  Version 0.4, 24.01.2009 (Changed the API of the method. Moved the additional param handling to this method)<br />
      */
      public function loadEntries($addStmtParams = array()){
         $M = &$this->__getAndInitServiceObject('modules::pager::data','PagerMapper',$this->__PagerConfig['Pager.DatabaseConnection']);
         return $M->loadEntries($this->__PagerConfig['Pager.StatementNamespace'],$this->__PagerConfig['Pager.EntriesStatement'],$this->__getStatementParams($addStmtParams),$this->__PagerConfig['Pager.CacheInSession']);
       // end function
      }


      /**
      *  @public
      *
      *  Loads a list of domain objects using a given data layer component.
      *
      *  @param APFObject $dataComponent instance of a data component, that loads the domain objects directly
      *  @param string $loadMethod name of the load method for the domain object
      *  @param string[] $addStmtParams additional statement parameters
      *  @return APFObject[] List of domain objects for the current page.
      *
      *  @author Christian Achatz
      *  @version
      *  Version 0.1, 01.09.2007<br />
      *  Version 0.2, 18.09.2007 (Introduced PHP 4 compatibility)<br />
      *  Version 0.3, 24.01.2009 (Added the $addStmtParams param to the API)<br />
      *  Version 0.4, 25.01.2009 (Refactored the function. Now uses the $this->loadEntries() to load the ids)<br />
      */
      public function loadEntriesByAppDataComponent(&$dataComponent,$loadMethod,$addStmtParams = array()){

         // check, if the load method exists
         if(in_array($loadMethod,get_class_methods($dataComponent))){

            // select the ids of the desired entries
            $entryIDs = $this->loadEntries($addStmtParams);

            // load the entries using the data layer component
            $entries = array();
            for($i = 0; $i < count($entryIDs); $i++){
               $entries[] = $dataComponent->{$loadMethod}($entryIDs[$i]);
             // end for
            }

            return $entries;

          // end if
         }
         else{
            throw new InvalidArgumentException('[PagerManager->loadEntriesByAppDataComponent()] '
                 .'Given data component ('.get_class($dataComponent).') has no method "'
                 .$loadMethod.'"! No entries can be loaded!',E_USER_WARNING);
            return array();
          // end else
         }

       // end function
      }


      /**
      *  @public
      *
      *  Sets the anchor name.
      *
      *  @param string $anchorName The name of the desired anchor.
      *
      *  @author Christian Achatz
      *  @version
      *  Version 0.1, 25.01.2009<br />
      */
      public function setAnchorName($anchorName = null){
         $this->__AnchorName = $anchorName;
       // end function
      }


      /**
      *  @public
      *
      *  Returns the anchor name.
      *
      *  @return string The name of the anchor
      *
      *  @author Christian Achatz
      *  @version
      *  Version 0.1, 25.01.2009<br />
      */
      public function getAnchorName(){
         return $this->__AnchorName;
       // end function
      }


      /**
      *  @public
      *
      *  Creates the graphical output of the pagerc concerning the configured presentation layer template.
      *
      *  @param array $addStmtParams list of additional statement params
      *  @return string The HTML representation of the pager
      *
      *  @author Christian Achatz
      *  @version
      *  Version 0.1, 05.08.2006<br />
      *  Version 0.2, 11.03.2007 (Ported to new document controller, removed MessageQueue)<br />
      *  Version 0.3, 29.08.2007 (Anchor name is not set as the document's attribute)<br />
      *  Version 0.4, 02.03.2008 (The page is now applied the context and language)<br />
      */
      public function getPager($addStmtParams = array()){

         // create pager page
         $pager = new Page();

         // apply context and language (form configuration purposes!)
         $pager->setLanguage($this->__Language);
         $pager->setContext($this->__Context);

         // load the econfigured design
         $pager->loadDesign($this->__PagerConfig['Pager.DesignNamespace'],$this->__PagerConfig['Pager.DesignTemplate']);

         // add the necessary config params and pages
         $document = &$pager->getRootDocument();
         $document->setAttribute('Pages',$this->__createPages4PagerDisplay($addStmtParams));
         $document->setAttribute('Config',array('ParameterPageName' => $this->__PagerConfig['Pager.ParameterPageName'],
                                                'ParameterCountName' => $this->__PagerConfig['Pager.ParameterCountName'],
                                                'EntriesPerPage' => $this->__PagerConfig['Pager.EntriesPerPage']
                                               )
                                );

         // add the anchor if desired
         if($this->__AnchorName !== null){
            $document->setAttribute('AnchorName',$this->__AnchorName);
          // end if
         }

         // transform pager GUI representation
         return $pager->transform();

       // end function
      }


      /**
      *  @public
      *
      *  Returns the name of the current URL params of the pager. The array featiures the following
      *  offsets:
      *  <ul>
      *    <li>PageName: the name of the page param</li>
      *    <li>CountName: the name of the count per page param</li>
      *  <ul>
      *
      *  @return string[] Url params of the pager.
      *
      *  @author Christian Achatz
      *  @version
      *  Version 0.1, 17.03.2007<br />
      */
      public function getPagerURLParameters(){
         return array('PageName' => $this->__PagerConfig['Pager.ParameterPageName'],'CountName' => $this->__PagerConfig['Pager.ParameterCountName']);
       // end function
      }


      /**
      *  @private
      *
      *  Creates a list of pager pages and returns it.
      *
      *  @param string[] $addStmtParams list of additional statement params
      *  @return PagerPage[] List of pages.
      *
      *  @author Christian Achatz
      *  @version
      *  Version 0.1, 05.08.2006<br />
      *  Version 0.2, 06.08.2006<br />
      *  Version 0.3, 14.08.2006 (Added a global configuration for url rewriting)<br />
      *  Version 0.4, 16.11.2007 (Switched to the FrontcontrollerLinkHandler)<br />
      *  Version 0.5, 26.04.2008 (Avoid division by zero)<br />
      *  Version 0.6, 19.01.2009 (Changed the implementation due to refactoring)<br />
      */
      private function __createPages4PagerDisplay($addStmtParams = array()){

         // start benchmarker
         $t = &Singleton::getInstance('BenchmarkTimer');
         $t->start('PagerManager::__createPages4PagerDisplay()');

         // initialize start params
         $start = (int)1;
		 
         $countPerPage = $this->getCountPerPage();
         $currentStart = (int)RequestHandler::getValue($this->__PagerConfig['Pager.ParameterPageName'],1)*$countPerPage;

         // initialize page delimiter params
         $M = &$this->__getAndInitServiceObject('modules::pager::data','PagerMapper',$this->__PagerConfig['Pager.DatabaseConnection']);
         $entriesCount = $M->getEntriesCount($this->__PagerConfig['Pager.StatementNamespace'],$this->__PagerConfig['Pager.CountStatement'],$this->__getStatementParams($addStmtParams),$this->__PagerConfig['Pager.CacheInSession']);

         $pageCount = ceil($entriesCount / $countPerPage);

         // create the page representation objects
         $pages = array();
         for($i = 0; $i < $pageCount; $i++){

            // create a new pager page object
            $pages[$i] = new PagerPage();

            // generate the link
            $link = FrontcontrollerLinkHandler::generateLink($_SERVER['REQUEST_URI'],array($this->__PagerConfig['Pager.ParameterPageName'] => $start));
            $pages[$i]->set('Link',$link);

            // set the number of the page
            $pages[$i]->set('Page',$i + 1);

            // mark as selected
            if($start === $currentStart/$countPerPage){
               $pages[$i]->set('isSelected',true);
             // end if
            }

            // add the entries count
            $pages[$i]->set('entriesCount',$entriesCount);

            // add the page count
            $pages[$i]->set('pageCount',$pageCount);

            // increment the start point
            $start++;

          // end for
         }

         // stop benchmarker and return the list of pager pages
         $t->stop('PagerManager::__createPages4PagerDisplay()');
         return $pages;

       // end function
      }


      /**
      *  @private
      *
      *  Returns a param array, that contains the initialized params from the page configuration
      *  file. The initialization is done by the url params. Default values are taken from the
      *  configuration offset *.Params. If no value is contained in the URL, the default ones are
      *  taken.
      *
      *  @param string $configString the param-value-string from the configuration (e.g.: param1:value1|param2:value2)
      *  @return string[] A list of statement parameters
      *
      *  @author Christian Achatz
      *  @version
      *  Version 0.1, 16.08.2006<br />
      *  Version 0.2, 24.01.2009 (Refactoring due to configuration param changes)<br />
      */
      private function __generateStatementParams($configString){

         // initialize the return array
         $stmtParams = array();

         // create the params
         if(!empty($configString)){

            $params = explode('|',$configString);

            for($i = 0; $i < count($params); $i++){

               // only accept params, that have a default value configured (to avoid errors!)
               if(substr_count($params[$i],':') !== 0){

                  // add the param with the default value of the url value
                  $temp = explode(':',$params[$i]);
                  $stmtParams = array_merge($stmtParams,RequestHandler::getValues(array(trim($temp[0]) => trim($temp[1]))));
                  unset($temp);

                // end if
               }

             // end for
            }

          // end if
         }

         return $stmtParams;

       // end function
      }
	  
		/**
		 * @public
		 *
		 * Returns the count of pages.
		 *
		 * @param string[] $addStmtParams list of additional statement params
		 * @return int The count of pages.
		 *
		 * @author Daniel Seemaier
		 * @version
		 * Version 0.1, 22.08.2010
		 */
		public function getPageCount($addStmtParams = array()) {
			$countPerPage = $this->getCountPerPage();
			
			$currentStart = (int)RequestHandler::getValue($this->__PagerConfig['Pager.ParameterPageName'],1)*$countPerPage;

			// initialize page delimiter params
			$M = &$this->__getAndInitServiceObject('modules::pager::data','PagerMapper',$this->__PagerConfig['Pager.DatabaseConnection']);
			$entriesCount = $M->getEntriesCount($this->__PagerConfig['Pager.StatementNamespace'],$this->__PagerConfig['Pager.CountStatement'],$this->__getStatementParams($addStmtParams),$this->__PagerConfig['Pager.CacheInSession']);

			return ceil($entriesCount / $countPerPage);		
		}
		
		/**
		 * @public
		 *
		 * Returns the count of entries per page.
		 *
		 * @return int The count of entries per page.
		 *
		 * @author Daniel Seemaier
		 * @version
		 * Version 0.1, 22.08.2010
		 */
		public function getCountPerPage() {
			if($this->__PagerConfig['Pager.AllowDynamicEntriesPerPage']) {
				$countPerPage = (int)RequestHandler::getValue($this->__PagerConfig['Pager.ParameterCountName'],0);
			} 
				
			if(!$this->__PagerConfig['Pager.AllowDynamicEntriesPerPage'] || $countPerPage === 0){ // avoid devision by zero!
				$countPerPage = (int)$this->__PagerConfig['Pager.EntriesPerPage'];
			}

			return $countPerPage;
		}
		
		/**
		 * @public
		 *
		 * Generates the link to a given page.
		 *
		 * @param int $page The number of the page.
		 * @param string $baseURI The base URI. Default = REQUEST_URI
		 * @return string The link to the given page.
		 *
		 * @author Daniel Seemaier
		 * @version
		 * Version 0.1, 22.08.2010
		 */
		public function getPageLink($page, $baseURI = null) {
			$linkParams = array($this->__PagerConfig['Pager.ParameterPageName'] => $page);
			if($this->__PagerConfig['Pager.AllowDynamicEntriesPerPage']) {
				$linkParams[$this->__PagerConfig['Pager.ParameterCountName']] = $this->getCountPerPage();
			}
			
			if($baseURI == null) {
				$baseURI = $_SERVER['REQUEST_URI'];
			}
			
			return FrontcontrollerLinkHandler::generateLink($baseURI, $linkParams);
		}

    // end class
   }
?>
pager_2_v1_controller.php:

Code: Alles auswählen

<?php
   /**
   *  <!--
   *  This file is part of the adventure php framework (APF) published under
   *  http://adventure-php-framework.org.
   *
   *  The APF is free software: you can redistribute it and/or modify
   *  it under the terms of the GNU Lesser General Public License as published
   *  by the Free Software Foundation, either version 3 of the License, or
   *  (at your option) any later version.
   *
   *  The APF is distributed in the hope that it will be useful,
   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
   *  GNU Lesser General Public License for more details.
   *
   *  You should have received a copy of the GNU Lesser General Public License
   *  along with the APF. If not, see http://www.gnu.org/licenses/lgpl-3.0.txt.
   *  -->
   */

   import('tools::link','FrontcontrollerLinkHandler');
   import('tools::request','RequestHandler');


   /**
   *  @package modules::schwarzesbrett::pres::documentcontroller::pager
   *  @class pager_2_v1_controller
   *
   *  Implementiert den DocumentController f�r den PagerManager. Folgende Features sind enthalten<br />
   *  <br />
   *    - Anzeige der Seiten<br />
   *    - Vor- & Zur�ck-Button<br />
   *    - Dynamisches W�hlen der Anzahl der Eintr�ge pro Seite<br />
   *  <br />
   *
   *  @author Christian Sch�fer
   *  @version
   *  Version 0.1, 06.08.2006<br />
   *  Version 0.2, 26.11.2006 (Pager gibt einen Leer-String zur�ck, falls keine Seiten vorhanden)<br />
   *  Version 0.3, 03.01.2007 (PageController V2 ready)<br />
   *  Version 0.4, 11.03.2007 (Komplett auf PageController V2 migriert)<br />
   *  Version 0.5, 16.11.2007 (Auf FrontcontrollerLinkHandler umgestellt)<br />
   */
   class pager_2_v1_controller extends base_controller {

      /**
      *  @private
      *  List of local variables.
      */
      private $_LOCALS;

      public function pager_2_v1_controller(){
      }

      /**
      *  @public
      *
      *  Implementiert die abstrakte Methode 'transformContent'.<br />
      *
      *  @author Christian Sch�fer
      *  @version
      *  Version 0.1, 06.08.2006<br />
      *  Version 0.2, 26.11.2006 (Pager gibt einen Leer-String zur�ck, falls keine Seiten vorhanden)<br />
      *  Version 0.3, 03.01.2007 (PageController V2 ready)<br />
      *  Version 0.4, 11.03.2007 (Komplett auf PageController V2 migriert)<br />
      *  Version 0.5, 29.08.2007 (Anker-Name mit eingebunden)<br />
      *  Version 0.6, 16.11.2007 (Switched to FrontcontrollerLinkHandler)<br />
      *  Version 0.7, 02.03.2008 (Mehrsprachigkeit der Beschriftung eingef�hrt)<br />
      */
      function transformContent(){

         // LOCALS f�llen
         $this->_LOCALS = RequestHandler::getValues(array($this->__Attributes['Config']['ParameterCountName'] => $this->__Attributes['Config']['EntriesPerPage']));

         // Pager leer zur�ckgeben, falls keine Seiten vorhanden sind.
         if(count($this->__Attributes['Pages']) == 0){

            // Content des aktuellen Designs leeren
            $this->__Content = '';

            // Funktion verlassen
            return '';

          // end if
         }

         $T = &Singleton::getInstance('BenchmarkTimer');
         $T->start('Pager');

         // Anzahl der Seiten generieren
         $PageCount = (int) 0;

         // Aktuelle Seite generieren
         $CurrentPage = (int) 0;

         // Anzahl der Eintr�ge
         $EntriesCount = (int) 0;

         // Puffer initialisieren
         $Buffer = (string)'';

         for($i = 0; $i < count($this->__Attributes['Pages']); $i++){

            if($this->__Attributes['Pages'][$i]->get('isSelected') == true){

               // Referenz auf Template holen
               $Template = &$this->__getTemplate('Page_Selected');

               // Aktuelle Page auslesen
               $CurrentPage = $this->__Attributes['Pages'][$i]->get('Page');

             // end if
            }
            else{

               // Referenz auf Template holen
               $Template = &$this->__getTemplate('Page');

             // end else
            }

            // Pager zusammenbauen
            if(isset($this->__Attributes['AnchorName'])){
               $Template->setPlaceHolder('Link',$this->__Attributes['Pages'][$i]->get('Link').'#'.$this->__Attributes['AnchorName']);
             // end if
            }
            else{
               $Template->setPlaceHolder('Link',$this->__Attributes['Pages'][$i]->get('Link'));
             // end else
            }
            $Template->setPlaceHolder('Seite',$this->__Attributes['Pages'][$i]->get('Page'));

            // Template transformieren
            $Buffer .= $Template->transformTemplate();

            // Anzahl der Seiten setzen
            $PageCount = $this->__Attributes['Pages'][$i]->get('pageCount');

            // Anzahl der Datens�tze setzen
            $EntriesCount = $this->__Attributes['Pages'][$i]->get('entriesCount');

          // end for
         }

         // Puffer in Inhalt einsetzen
         $this->setPlaceHolder('Inhalt',$Buffer);


         // VorherigeSeite
         if($CurrentPage > 1){

            // Werte berechnen
            $Page = $CurrentPage - 1;
            $EntriesPerPage = $this->_LOCALS[$this->__Attributes['Config']['ParameterCountName']];
            $Start = ($Page * $EntriesPerPage) - $EntriesPerPage;

            // Link generieren
            $Link = FrontcontrollerLinkHandler::generateLink($_SERVER['REQUEST_URI'],array($this->__Attributes['Config']['ParameterPageName'] => $Start));


            // Template vorherige Seite ausgeben
            $Template__VorherigeSeite_Aktiv = & $this->__getTemplate('VorherigeSeite_Aktiv');


            if(isset($this->__Attributes['AnchorName'])){
               $Template__VorherigeSeite_Aktiv->setPlaceHolder('Link',$Link.'#'.$this->__Attributes['AnchorName']);
             // end if
            }
            else{
               $Template__VorherigeSeite_Aktiv->setPlaceHolder('Link',$Link);
             // end else
            }
            $this->setPlaceHolder('VorherigeSeite',$Template__VorherigeSeite_Aktiv->transformTemplate());

          // end if
         }
         else{

            // Template vorherige Seite (inaktiv) ausgeben
            $Template__VorherigeSeite = & $this->__getTemplate('VorherigeSeite_Inaktiv');
            $this->setPlaceHolder('VorherigeSeite',$Template__VorherigeSeite->transformTemplate());

          // end else
         }


         // NaechsteSeite
         if($CurrentPage < $PageCount){

            // Werte berechnen
            $Page = $CurrentPage + 1;
            $EntriesPerPage = $this->_LOCALS[$this->__Attributes['Config']['ParameterCountName']];
            $Start = ($Page * $EntriesPerPage) - $EntriesPerPage;

            // Link generieren
            $Link = FrontcontrollerLinkHandler::generateLink($_SERVER['REQUEST_URI'],array($this->__Attributes['Config']['ParameterPageName'] => $Start));

            $Template__NaechsteSeite_Aktiv = & $this->__getTemplate('NaechsteSeite_Aktiv');

            if(isset($this->__Attributes['AnchorName'])){
               $Template__NaechsteSeite_Aktiv->setPlaceHolder('Link',$Link.'#'.$this->__Attributes['AnchorName']);
             // end if
            }
            else{
               $Template__NaechsteSeite_Aktiv->setPlaceHolder('Link',$Link);
             // end else
            }

            $this->setPlaceHolder('NaechsteSeite',$Template__NaechsteSeite_Aktiv->transformTemplate());

          // end if
         }
         else{

            $Template__NaechsteSeite_Inaktiv = & $this->__getTemplate('NaechsteSeite_Inaktiv');
            $this->setPlaceHolder('NaechsteSeite',$Template__NaechsteSeite_Inaktiv->transformTemplate());

          // end else
         }


         // Eintr�ge / Seite
         $EntriesPerPage = array(5,10,15,20);
         $Buffer = (string)'';

         foreach($EntriesPerPage as $Key => $Value){

            if($this->_LOCALS[$this->__Attributes['Config']['ParameterCountName']] == $Value){
               $Template = &$this->__getTemplate('EntriesPerPage_Aktiv');
             // end if
            }
            else{
               $Template = & $this->__getTemplate('EntriesPerPage_Inaktiv');
             // end else
            }

            // Link generieren
            $Link = FrontcontrollerLinkHandler::generateLink($_SERVER['REQUEST_URI'],array($this->__Attributes['Config']['ParameterPageName'] => '0',$this->__Attributes['Config']['ParameterCountName'] => $Value));

            if(isset($this->__Attributes['AnchorName'])){
               $Template->setPlaceHolder('Link',$Link.'#'.$this->__Attributes['AnchorName']);
             // end if
            }
            else{
               $Template->setPlaceHolder('Link',$Link);
             // end else
            }

            // Anzahl einsetzen
            $Template->setPlaceHolder('Count',$Value);

            // Template in Puffer einsetzen
            $Buffer .= $Template->transformTemplate();

          // end foreach
         }

         $this->setPlaceHolder('EntriesPerPage',$Buffer);

         // Beschriftung f�r Eintr�ge/Seite einf�gen
         $Template__EntriesPerPage = &$this->__getTemplate('EntriesPerPage_'.$this->__Language);
         $this->setPlaceHolder('EntriesPerPage_Display',$Template__EntriesPerPage->transformTemplate());

         // Timer stoppen
         $T->stop('Pager');

       // end function
      }

    // end class
   }
?>
Konfiguration:

Code: Alles auswählen

[Topic]
Pager.DatabaseConnection = "Forum"

Pager.EntriesPerPage = "10"
Pager.ParameterPageName = "site"
Pager.ParameterCountName = "count"
Pager.AllowDynamicEntriesPerPage = "false"

Pager.StatementNamespace = "dotnot"
Pager.CountStatement = "load_topics_count"
Pager.CountStatement.Params = "ForumID:0"
Pager.EntriesStatement = "load_topic_ids"
Pager.EntriesStatement.Params = "ForumID:0"

Pager.DesignNamespace = "dotnot::pres::templates::forum::pager"
Pager.DesignTemplate = "topic_pager"

Pager.CacheInSession = "false"

Benutzeravatar
dr.e.
Administrator
Beiträge: 4605
Registriert: 04.11.2007, 16:13:53

Re: Pager -> Weiterleitung auf die richtige Seite

Beitrag von dr.e. » 24.08.2010, 15:01:11

Hallo Well,

danke für dein Engagement, ich schau mir das in den nächsten Tagen (Samstag ist Coding-Tag :)) an und versuche das in 1.13 direkt einzubringen.
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4605
Registriert: 04.11.2007, 16:13:53

Re: Pager -> Weiterleitung auf die richtige Seite

Beitrag von dr.e. » 13.09.2010, 20:35:44

Hallo Daniel,

ich habe mir - dendlich - nun deine Implementierun angesehen. Grundsätzlich gibt es nichts daran auszusetzen, nur enthält sie nicht rückwärts-kompatible Änderungen bei der Definition der Pager-URL-Parameter. Ist es Grund-Voraussetzung, dass du nur noch mit Pages statt mit einem Start-Parameter arbeitest? Falls ja, müssen wir die Migration des Codes für 1.13 entsprechend dokumentieren (ich mach das).
Viele Grüße,
Christian

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: Pager -> Weiterleitung auf die richtige Seite

Beitrag von Well » 17.09.2010, 13:04:45

dr.e. hat geschrieben:Ist es Grund-Voraussetzung, dass du nur noch mit Pages statt mit einem Start-Parameter arbeitest?
Nein. Ich fände es so aber benutzerfreundlicher.

Hier wurde es ja auch erwähnt.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4605
Registriert: 04.11.2007, 16:13:53

Re: Pager -> Weiterleitung auf die richtige Seite

Beitrag von dr.e. » 18.09.2010, 09:13:20

Hi Well,

korrekt, dann werde ich die Änderungen lokal ins SVN einpflegen und die Änderungen in die Doku bzw. die Migrations-Doku von 1.12 auf 1.13 aufnehmen. Ich melde mich, sobald das im SVN verfügbar ist.

Vielen Dank schon mal! :)
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4605
Registriert: 04.11.2007, 16:13:53

Re: Pager -> Weiterleitung auf die richtige Seite

Beitrag von dr.e. » 22.09.2010, 19:51:02

Hallo Daniel,

ich habe in den letzten drei Tagen deine Änderungen in den APF-Code integriert. An den Code-Snippets waren noch einige Anpassungen notwendig, damit die Seitenwahl sauber funktioniert. Die Änderungen können direkt aus dem SVN bezogen werden.

Unter http://wiki.adventure-php-framework.org ... 2_auf_1.13 findest sich eine Beschreibung der notwendigen Änderungen für den Pager.

Ich würde mich freuen, wenn du den Code kurz reviewen und in deine Anwendung integrieren und testen könntest. Vielen Dank für deinen Einsatz! :)
Viele Grüße,
Christian

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: Pager -> Weiterleitung auf die richtige Seite

Beitrag von Well » 22.09.2010, 21:39:25

Scheint zu funktionieren. :D

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast