Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.php > #3614
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Newsgroups | de.comp.lang.php |
| Subject | Re: Darstellung von Knoten mit Trennung zwischen view und Code |
| Date | 2015-12-17 20:45 +0100 |
| Organization | PointedEars Software (PES) |
| Message-ID | <1840896.Q9fhR2YkPP@PointedEars.de> (permalink) |
| References | <n4uao3$v4r$1@news.albasani.net> <1t5672db4fi7736n3e8%sfroehli@Froehlich.Priv.at> |
Stefan Froehlich wrote:
> On Thu, 17 Dec 2015 13:44:51 Jan Novak wrote:
>> class Groups{
>> ...
>>
>> public function ceateTree($groups,$parent_id=0){
>> foreach($groups as $group){
>> if($group->getPrimaryGroup()===$parent_id){
>> echo '<li>', $group->getName();
>> this->ceateTree($groups,$group->getId());
>> echo '</li>';
>> }
>> }
>> }
>> }
>> ...
>> }
>
>> Ich habe meinen Code und meine Ausgaben in getrennten Dateien stehen.
>> Der View ist eine "dumme" HTML Datei, in welcher nur Anweisungen wie zum
>> Beispiel
>> <?php echo $this->WasAuchImmer ?>
>> stehen.
>
> So weit, so gut - aber wenn Du Views verwendest, wieso hast Du dann
> echo-Befehle in Deinem Code stehen.
Weil man das im allgemeinen so machen sollte. Wobei <?php echo … ?> ab
PHP 5.4 kürzer <?= … ?> geschrieben werden kann. Und PHP < 5.4 will man
nicht mehr benutzen, schon aus Performancegründen nicht.
> Statt dessen empfiehlt sich in
> einem ersten Schritt z.B. so etwas:
>
> #v+
> public function createTree($groups, $parent_id=0) {
> $string = '';
> foreach ($groups as $group) {
> $string = '<li>' . $group->getName();
> $string .= $this->createTree($groups, $group->getId());
> $string .= '</li>';
> }
Effizienter:
$that = $this;
$string = implode('',
array_map(function ($group) use ($that, $groups) {
return '<li>' . $group->getName()
. $that->createTree($groups, $group->getId())
. '</li>';
}, $groups)
);
> return $string;
> }
> #v-
Bei sauberem MVC gehört überhaupt kein Markup in diese Methode.
>> Wie kann ich die selbstaufrufende Funktion "createTree" in den
>> HTML View einbetten, ohne dort wieder viel PHP Code haben zu
>> müssen?
>
> In Deinem View musst Du nun $groups zur Verfügung haben
Nein, muss er nicht.
> und kannst danach:
>
> #v+
> <?php echo $this->createTree($groups); ?>
> #v-
Falsch. Das Template darf maximal $this->groups benutzen. Es soll nämlich
_nicht_ von Implementierungsdetails abhängig sein.
> schreiben (wobei mir nicht ganz klar ist, wo der Unterschied
> zwischen $this und $groups sein soll, und ob $groups überhaupt
> benötigt wird; aber das musst Du selbst wissen).
$this ist bei MVC in Templates üblicherweise die Referenz auf die Instanz
der View-Klasse für das Template (denn dieses wird in einer View-Methode –
render() o.ä. – included), $group wären die darzustellenden Daten. Wobei
sich aber nicht das Template die Daten aus dem Model holen, oder gar den
Controller bemühen soll, sondern der Controller muss vorgängig die Daten aus
dem Model holen und damit eine möglichst darstellungsunabhängige View-
Variable definieren, deren Wert vom Template über die View-Instanz benutzt
wird:
Controller <----> Model
^ `-. .-' :
: X X
v .-' '-. :
View <--------- Template
Also:
<?php foreach ($this->groups as $group): ?>
<li><?= $group->name ?>…</li>
<?php endforeach; ?>
> In einem zweiten Schritt würde ich dann auch für den inneren
> HTML-Code "<li>$name $subtree</li>" noch ein Template schreiben
> und aus der Funktion heraus aufrufen, damit Du in der Programmlogik
> am Ende kein HTML mehr hast.
Die Rekursionslogik für die Darstellung gehört ins Template, die
Rekursionslogik für die Daten ins Model.
--
PointedEars
Zend Certified PHP Engineer
Twitter: @PointedEars2
Please do not cc me. / Bitte keine Kopien per E-Mail.
Back to de.comp.lang.php | Previous | Next — Previous in thread | Next in thread | Find similar
Darstellung von Knoten mit Trennung zwischen view und Code Jan Novak <repcom@gmail.com> - 2015-12-17 13:44 +0100
Re: Darstellung von Knoten mit Trennung zwischen view und Code Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2015-12-17 16:01 +0000
Re: Darstellung von Knoten mit Trennung zwischen view und Code Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-12-17 20:45 +0100
Re: Darstellung von Knoten mit Trennung zwischen view und Code Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2015-12-17 22:27 +0000
Re: Darstellung von Knoten mit Trennung zwischen view und Code Jan Novak <repcom@gmail.com> - 2015-12-18 08:25 +0100
Re: Darstellung von Knoten mit Trennung zwischen view und Code Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-12-19 18:33 +0100
Re: Darstellung von Knoten mit Trennung zwischen view und Code Jan Novak <repcom@gmail.com> - 2016-01-11 14:08 +0100
csiph-web