[Beispiel] Verständnis Umsetzung MVC innerhalb des APF

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

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von ma2604121 » 04.04.2011, 20:26:13

Logikfehler. Das war wohl der Eile geschuldet. Hab es korrigiert.

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

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von ma2604121 » 04.04.2011, 21:43:24

Ich muss nun nochmals auf den Iterator zurück kommen.

Derzeit wird die Liste der vorhandenen Nachrichten durch diesen erstellt.
Template

Code: Alles auswählen

<table>
    <tr>
    <th>#</th>
    <th>Nachricht</th>
    <th>Erzeugt</th>
    </tr>
    <html:placeholder name="list"/>

<core:addtaglib namespace="tools::html::taglib" prefix="html" class="iterator"/>
<html:iterator name="liste">
    <iterator:item>
    <tr>
        <td><item:placeholder name="id" /></td>
        <td><item:placeholder name="message" /></td>
        <td><item:placeholder name="mod" /></td>
    </tr>
    </iterator:item>
</html:iterator>
</table> 
Controller

Code: Alles auswählen

    /**
     * Iterator zum Ausgeben der vorhandenen Nachrichten
     */
    public function createMessages(){

    // Kontakt zu Mapper herstellen
    $mM = &$this->getMapper();

    // Referenz auf den Interator
    $iterator = &$this->__getIterator('liste');

    // Datencontainer befüllen
    $iterator->fillDataContainer($mM->readHeadlines());

    // Iterator ausgeben
    $iterator->transformOnPlace();

    } 
Ausgabe

Code: Alles auswählen

#  	Nachricht  	Erzeugt
69 	Testeintrag4 	2011-04-04 20:27:29
65 	Testeintrag2 	2011-04-04 19:23:47
61 	Testeintrag1 	2011-04-04 19:21:57
56 	Testeintrag3 	2011-04-04 14:38:58
Ich möchte nun dieses Beispielprojekt etwas weiterentwickeln und die Möglichkeit eröffnen, die vorhandenen Beiträge zu löschen. Die Überlegung: Ich unterlege die jeweilige Id mit einem Link, der dies ermöglicht.

Hierzu bietet sich, sofern ich das richtig erkenne, die APF-Komponente Links bzw. im vorliegenden Fall der FrontcontrollerControllerLinkHandler an.

Mit diesem könnte ich demnach bspw. wie nachfolgend einen Link generieren lassen:

Code: Alles auswählen

$linkdata = array(  'index' => 'index',  'delete' => $id  );
$link = FrontcontrollerLinkHandler::generateLink($URL,$ChangeParams); 
Nun frage ich mich verschiedene Dinge:
1. Wie bringe ich den Iterator dazu, mir diese Links zu erstellen? Geht das überhaupt?
2. Wie bringe ich die erzeugten Links in das Template (wobei das noch relativ einfach sein dürfte wenn die Links vorliegen)?

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von dave » 04.04.2011, 21:55:10

ma2604121 hat geschrieben: 2. Wie bringe ich die erzeugten Links in das Template (wobei das noch relativ einfach sein dürfte wenn die Links vorliegen)?
Da kann ich dir was anhand deines Templates liefern:

Code: Alles auswählen

<table>
    <tr>
    <th>#</th>
    <th>Nachricht</th>
    <th>Erzeugt</th>
    </tr>
    <html:placeholder name="list"/>

<core:addtaglib namespace="tools::html::taglib" prefix="html" class="iterator"/>
<html:iterator name="liste">
    <iterator:item>
    <tr>
        <td><a href="<item:placeholder name="link" />"><item:placeholder name="id" /></a></td>
        <td><item:placeholder name="message" /></td>
        <td><item:placeholder name="mod" /></td>
    </tr>
    </iterator:item>
</html:iterator>
</table> 
Wie du nun aber die Daten aber aus dem Iterator an den Platzhalter übergibst, kann ich dir auch grade nicht sagen ... kann doch aber nicht so schwer sein? Ja, ist schon wieder bisschen spät ...

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

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von ma2604121 » 04.04.2011, 21:59:29

Ja, so hätte bzw. habe ich es auch gemacht.

Nur das Erzeugen der Links bereitet mir Schwierigkeiten. Die Datenübergabe an das Template ist kein Problem. Dies ist bereits weiter oben umgesetzt.

Wobei in diesem Fall könnte man die Linkproblematik notfalls auch recht einfach lösen:

Code: Alles auswählen

<td><a href="index.php?action=del&id=<item:placeholder name="id" />"><item:placeholder name="id" /></a></td>
<td><item:placeholder name="message" /></td>
<td><item:placeholder name="mod" /></td> 

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von dave » 04.04.2011, 22:14:58

Ja, so könnte man es natürlich aich machen ;).

Zu Lernzwecken jedoch eine Anregung, mehr kann ich im Moment nicht liefern:
Du musst dein Array, welches du via

Code: Alles auswählen

$iterator->fillDataContainer($mM->readHeadlines()); 
von deiner readHeadlines-Funktion bekommst, neu aufbauen.
Am Ende müsste es in etwa so aussehen:

Code: Alles auswählen

array('link' => 'http// ... durch den Linkcontroller', 'id' => $DBid, 'message' => $DBmessage, 'mod' => $DBmodifiziert); 
Das beruht jetzt aber auf einer Vermutung, ich weiss leider gerade nicht genau genau, wie es aussieht, was deine Funktion readHeadlines() zurück liefert. Ich muss mir sowas immer ausgeben lassen, sonst habe ich da keine Vorstellung dafür ^^.

Also so oder so ähnlich :D Vllt. bringt es dich ja heute Abend noch etwas weiter. Aber ich muss gestehen, dass ich mit Arrays und Schleifen ein echter Noob bin, da fehlt einfach noch die Praxis und das Vorstellungsvermögen -> Copy + Paste ist dein Freund :oops:

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

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von dr.e. » 04.04.2011, 22:49:09

Hallo zusammen,

die korrekte Vorgehensweise ist hier das Generieren der Links im Vorfeld. Der Iterator ist "nur" zur Ausgabe von sich wiederholenden Inhalten gedacht, nicht zur Generierung von Inhalten. Wobei man letzteres sicher auch implementieren könnte. Ich kann mir vorstellen, dass man dem Iterator einfach einen Mapper/Provider mitgeben kann, der dann einen Eintrag übersetzt. Allerdings wäre das dann an eine API-Anpassung geknüpft, die besagt, wie ein Mapper/Provider auszusehen hat und wie ein Eintrag gemappt wird.

Es ist vermutlich also einfacher, den Link im Vorhinein beim Erzeugen der Einträge zu generieren und dann die Inhalte vom Iterator einfach ausgeben zu lassen. Manuell schreiben würde ich die Links nicht gerade.
Viele Grüße,
Christian

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

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von ma2604121 » 04.04.2011, 22:49:35

Das dürfte nicht so einfach sein:

Code: Alles auswählen

    public function readHeadlines(){

    // Datenbankverbindung
    $SQL = &$this->getConnection();

    // Query formulieren, neueste Nachricht als Erstes (DESC)
    $select = 'SELECT * FROM `messages` ORDER BY `messages`.`mod` DESC';

    // Nachrichten holen
    $result = $SQL->executeTextStatement($select);

    // Ausgelesene Nachrichten aufbereiten
    while ($data = $SQL->fetchData($result)){
        $content[] = $data;
    }

    // Ergebnisse ausliefern
    return $content;

    } 
Ursprünglich hatte ich es so aufgebaut:

Code: Alles auswählen

public function readHeadlines(){

    // Datenbankverbindung
    $SQL = &$this->getConnection();

    // Query formulieren, neueste Nachricht als Erstes (DESC)
    $select = 'SELECT * FROM `messages` ORDER BY `messages`.`mod` DESC';

    // Nachrichten holen
    $result = $SQL->executeTextStatement($select);

    // Ausgelesene Nachrichten aufbereiten
    while ($data = $SQL->fetchData($result)){
        $content[] = array('id' => $data['id'], 'message' => $data['message'], 'mod' => $data['mod']);
    }

    // Ergebnisse ausliefern
    return $content;

    } 
Screeze gab mir dann aber den Tipp es zur Vereinfachung wie oben zu machen. Damit dürfte es allerdings eher problematisch sein, die Links zu generieren. Jedenfalls sehe ich das momentan so.

Ich denke in diesem Fall wäre es dann einfacher wieder auf die ursprüngliche Variante umzustellen und dort die Links zu generieren und mit ins Array zu schieben.

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

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von dr.e. » 04.04.2011, 22:56:03

Ich denke in diesem Fall wäre es dann einfacher wieder auf die ursprüngliche Variante umzustellen und dort die Links zu generieren und mit ins Array zu schieben.
Das meinte ich ja! Kann sein, dass ich mich etwas unverständlich ausgedrückt hatte. :D
Viele Grüße,
Christian

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

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von ma2604121 » 04.04.2011, 22:57:53

Nein, das von dir war verständlich. Unsere Antworten hatten sich allerdings etwas überschnitten. ;)

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von Screeze » 04.04.2011, 22:58:57

Ich würde bei meiner Variante bleiben, und zwar aus folgendem Grund: Das generieren eines Links zum bearbeiten, ist nicht Aufgabe deines Mappers. Meinem Verständnis nach ist das generien von Links zur Ausgabe Aufgabe des Controllers (ohne Gewähr).
Daher würde ich einfach im Controller, das Array das du bekommst aufbereiten, das geht einfach indem du es in etwa so machst:

Code: Alles auswählen

$Headlines = $mM->readHeadlines();

// Hinzufügen des bearbeiten Links
foreach($Headlines as &$Headline){
    $Headline['Link'] = FrontcontrollerLinkHandler::generateLink(
        $URL,
        array(
            'index' => 'index',
            'delete' => $Headline['id']
        )
    ); 
}

$iterator->fillDataContainer($Headlines); 
 
Und im template dann:

Code: Alles auswählen

<td><a href="<item:placeholder name="Link" />"><item:placeholder name="id" /></a></td>

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

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von dr.e. » 04.04.2011, 23:12:33

@Ralf: korrekt, das ist Aufgabe des Controllers. Ein Link ist Inhalt der Aussenpräsentation einer Anwendung und damit schon per se Inhalt der Präsentations-Schicht. Da MVC wiederum ein Pattern der Präsentations-Schicht ist, ist es dort genau richtig angesiedelt.
Viele Grüße,
Christian

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

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von ma2604121 » 07.04.2011, 13:44:00

Weiter geht es...
Screeze hat geschrieben:Daher würde ich einfach im Controller, das Array das du bekommst aufbereiten, das geht einfach indem du es in etwa so machst:
Die Linkgenerierung und die Integration ins Template ist umgesetzt. Wobei ich da noch ein Problem mit dem Verständnis habe:

Das ist soweit klar:

Code: Alles auswählen

foreach ($headlines as &$headline){
        $headline['link'] = FrontcontrollerLinkHandler::generateLink(
            $URL,
            array(
            'index' => 'index',
            'delete' => $headline['id'],
            )
            );
    } 
Die Frage, die ich mir stelle ist: Weiße ich $URL einen fixen Wert zu oder wie soll die Variable befüllt werden?

Derzeit mache ich es so:

Code: Alles auswählen

    $URL = 'index.php';

    foreach ($headlines as &$headline){
        $headline['link'] = FrontcontrollerLinkHandler::generateLink(
            $URL,
            array(
            'index' => 'index',
            'delete' => $headline['id'],
            )
            );
    } 
Da bin ich mir aber unsicher, ob das richtig ist...

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von Screeze » 07.04.2011, 14:14:53

Also ich habe in meiner index.php ne konstante mit der Haupt-url zu meiner Applikation (ohne index.php, das brauchts nicht) definiert, die ich einfach übergeben. Du kannst aber auch einen Wert aus dem $_SERVER array nehmen, weis aber grad nicht auswendig welcher der richtige war.

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

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von Megger » 07.04.2011, 14:20:35

$_SERVER['REQUEST_URI']
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
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von dave » 07.04.2011, 16:55:19

Bei mir ist immer leer. Ich ertselle an jedem Ort die URL komplett neu. So muss ich nicht schauen, ob es den Teil der Url so schon gibt und diesen dann mit schleifen. Und Parameter übergebe ich nicht via URL ;)

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast