Weitere Daten an den PagerManager übergeben

Hier finden sich Fragen und Ergänzung zur Dokumentation. // All questions and discussions about the documentation.
Antworten
Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Weitere Daten an den PagerManager übergeben

Beitrag von ma2604121 » 22.08.2011, 15:50:52

Hallo,

ich nutze den PagerManager zur Darstellung von Daten. Das Problem ist, dass derzeit alle Daten aus der Datenbanktabelle angezeigt werden. Es sollen jedoch nur die Daten des jeweils angemeldeten Benutzers dargestellt werden.

Gibt es eine Möglichkeit, dem PagerManager die ID des aktuellen Benutzers zu übermitteln, so dass eine entsprechende Eingrenzung der Abfrage erfolgen kann?

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: Weitere Daten an den PagerManager übergeben

Beitrag von Megger » 22.08.2011, 16:02:06

Du kannst die Statement Dateien anpassen, sodass du die UserID noch mit ins SQL Statement packst und den Wert dann als Parameter übergibst!
Die Dokumentation ist da nicht wirklich ausführlich, aber beim Anwendungsbeispiel werden Parameter übergeben
http://adventure-php-framework.org/Seit ... gsbeispiel
Bei der Beschreibung zur Business Schicht der Kommentar Funktion ist es noch ein bisschen ausführlicher
http://adventure-php-framework.org/Seit ... essschicht
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: Weitere Daten an den PagerManager übergeben

Beitrag von ma2604121 » 22.08.2011, 16:22:52

Gute Hinweise!

Nach der Einarbeitung der Änderungen habe ich einen Teilerfolg:
Die Anzahl der dargestellten Infos ist nun auf die Anzahl von Pager.EntriesPerPage (aus der DEFAULT_pager.ini) beschränkt.

Problem:
Ich kann nicht weiterblättern... Die entsprechenden Links sind nicht vorhanden (die waren vor der Änderung da).

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

Re: Weitere Daten an den PagerManager übergeben

Beitrag von dr.e. » 22.08.2011, 19:42:55

Hi,

ich denke, du rufst in deinem Code irgendwo loadEntries() in deinem Code auf. In dieser Methode kannst du mit dem optionalen Argument ein assoziatives Array von Parametern übergeben. Beispiel:

Code: Alles auswählen

$pager->loadEntries(array('user-id', 123)); 
Im Pager-Statement kannst du diesen Parameter dann per

Code: Alles auswählen

[user-id]
verwenden. Beispiel:

Code: Alles auswählen

SELECT * from `my_table`
...
WHERE `user_id` = [user-id]
Ich hoffe, das hilft dir weiter! :)
Viele Grüße,
Christian

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: Weitere Daten an den PagerManager übergeben

Beitrag von ma2604121 » 22.08.2011, 19:49:16

Ja, das habe ich alles umgesetzt und es funktioniert auch. Ich bekomme nur noch die Anzahl an Datensätzen angezeigt, welche ich in der Config festgelegt habe. Auch nur die Datensätze des angemeldeten Benutzers.

Allerdings fehlen die Navigationselemente, um die Listen durchzublättern.

Bevor ich die Änderungen (Einschränkung auf den angemeldeten Benutzer) durchgeführt hatte, waren die Navigationselemente da.

Die DEFAULT_pager.ini

Code: Alles auswählen

[trailsPager]
Pager.DatabaseConnection = "rl"

Pager.EntriesPerPage = "2"

Pager.ParameterPageName = "pstart"
Pager.ParameterCountName = "pact"

Pager.StatementNamespace = "modules::pager"
Pager.CountStatement = "load_entries_count.sql"
Pager.CountStatement.Params = "UserID"
Pager.EntriesStatement = "load_entry_ids.sql"
Pager.EntriesStatement.Params = "UserID"

Pager.DesignNamespace = "modules::pager::pres::templates"
Pager.DesignTemplate = "pager_2"

Pager.CacheInSession = "false"

; seit 1.13. < 1.13 immer true
Pager.AllowDynamicEntriesPerPage = "true"
Die DEFAULT_load_entries_count.sql

Code: Alles auswählen

SELECT COUNT(*) AS EntriesCount
FROM `trails`
WHERE `UserID` = '[UserID]'
Die DEFAULT_load_entry_ids.sql

Code: Alles auswählen

SELECT `trails`.`id` AS DB_ID
FROM `trails`
WHERE `UserID` = '[UserID]'
ORDER BY `trails`.`title`, title, length
DESC LIMIT [Start], [EntriesCount];
Und schließlich der PHP-Teil:

Code: Alles auswählen

    public function loadEntries(){
        // Benutzer-ID holen
    $uM = $this->getServiceObject('modules::usermanagement::biz', 'UmgtUserSessionStore', 'SESSIONSINGLETON');
    $appIdent = $this->getApplicationIdentifier();
    $user = $uM->getUser($appIdent);
    $UserID = $user->getObjectId();

    // Pager einbinden
    $pMF = &$this->getServiceObject('modules::pager::biz', 'PagerManagerFabric');
    $pM = &$pMF->getPagerManager('trailsPager');
    return $pM->loadEntriesByAppDataComponent($this, 'loadArticleCommentByID', array('UserID' => $UserID));

    }

    public function loadArticleCommentByID($id){
    $SQL = &$this->getConnection();
    $select = 'SELECT * FROM `trails` WHERE `trails`.`id` = \'' . $id . '\'';
    $result = $SQL->executeTextStatement($select);
    return $SQL->fetchData($result);
    } 
Und im Template

Code: Alles auswählen

<p><html:placeholder name="Pager" /></p> 
Sollte eigentlich alles da sein.

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

Re: Weitere Daten an den PagerManager übergeben

Beitrag von dr.e. » 23.08.2011, 15:21:19

Freut mich, dass nun alles läuft. Es fehlt nur noch eine Kleinigkeit: der Platzhalter muss mit dem Output von

Code: Alles auswählen

$pM->getPager(); 
gefüllt werden. Dann sollte auch die Anzeige funktionieren. Der Methode musst du ebenso wie der loadEntriesByAppDataComponent() die zustätzlichen Parameter übergeben.
Viele Grüße,
Christian

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: Weitere Daten an den PagerManager übergeben

Beitrag von ma2604121 » 23.08.2011, 21:47:05

Ich habe im Controller folgende Anweisung:

Code: Alles auswählen

    $pMF = &$this->getServiceObject('modules::pager::biz', 'PagerManagerFabric');
    $pM = &$pMF->getPagerManager('trailsPager');
    $this->setPlaceHolder('Pager', $pM->getPager()); 
Somit sollte doch der Platzhalter befüllt werden?

Mal die Kurzfassung des Controllers (falls das hilft):

Code: Alles auswählen

<?php
import('rl::data', 'TrailsMapper');
import('tools::html::taglib::documentcontroller','iteratorBaseController');
import('tools::link','LinkGenerator');

class trailsController extends iteratorBaseController{

    public function  transformContent() {
    $form = &$this->getForm('trail');

    // Platzhalter im View mit vorhandenen Nachrichten füllen
    $this->setPlaceHolder('list', $this->createTrails());
    $pMF = &$this->getServiceObject('modules::pager::biz', 'PagerManagerFabric');
    $pM = &$pMF->getPagerManager('trailsPager');
    $this->setPlaceHolder('Pager', $pM->getPager());

    if ($form->isSent() && $form->isValid()){
        /* ... */    
        $form->transformOnPlace();
    }
    else{
        /* ... */    
        $this->setPlaceHolder('list', $this->createTrails());
        $this->getForm('trail')->transformOnPlace();
    }
    }

    public function createTrails(){
    }

    private function &getMapper(){
    }
}
?>

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: Weitere Daten an den PagerManager übergeben

Beitrag von Megger » 23.08.2011, 22:09:44

ma2604121 hat geschrieben:Somit sollte doch der Platzhalter befüllt werden?
dr.e. hat geschrieben:Der Methode musst du ebenso wie der loadEntriesByAppDataComponent() die zustätzlichen Parameter übergeben.
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste