Ankündigung

Einklappen
Keine Ankündigung bisher.

cakePHP View Abstraktion

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • cakePHP View Abstraktion

    Hallo,

    Ich bin gerade dabei eine View Abstraktion für cakePHP zu schreiben. Ziel ist das Plugins nur noch eine Struktur als View zur Verfügung stellen und daraus dann der spezielle Code für die Website generiert wird.
    Das hat den Sinn das Plugins dann nur noch in Projekte geworfen werfen müssen und sich automatisch an das Design der ganzen Website anpassen.

    Die Strukturinformationen möchte ich als XML ablegen.
    PHP-Code:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <accordion id="Foobaa">
      <?php foreach($data as $row): ?>
      <entry headline="<?php echo Sanitize::html($row['headline']); ?>">
        <?php echo Sanitize::html($row['content']); ?>
      </entry>
      <?php endforeach; ?>
    </accordion>
    Dieser View würde nachdem er von cakePHP gerendert wurde nur schematische Daten enthalten und ich könnte ihn parsen und in HTML übersetzen.

    Dafür lädt die ViewAl Klasse Plugins die dann die einzelne Tags/Tag Blocks mit dem richtigen HTML ersetzt. Damit das auch zu dem Design der jeweiligen Seite passt haben diese Plugins auch einen View der ganz normal von cake geparsed wird.

    Also mache ich eigentlich nur folgendes:
    cakePHP Plugins stellen Daten bereit (als XML) -> ViewAl lädt Plugins -> ViewAl Plugins übersetzten strukturieren Daten und übergeben sie an einen -> View. der das erzeugt was an der stelle der Daten stehen soll.

    View eines ViewAl Plugins:
    PHP-Code:
    <div class="accordion">
      <?php foreach($entrys as $entry): ?>
        <h1><?php echo Sanitize::html($entry['attr']['headline']) ?></h1>
        <div><?php echo Sanitize::html($entry['content']) ?></div>
      <?php endforeach; ?>
    </div>
    Um das ganze flexibel zu halten dachte ich daran in dem View der App die Möglichkeit zu schaffen einzelne Elemente des Plugin Views zu laden jedoch trotzdem auf alle Variablen zugriff zu haben die an den View übergeben werden. Somit kann man von Fall zu Fall Entscheiden ob Teile des Automatisch generiertem Codes genutzt werden oder nicht:

    PHP-Code:
    <div>
      lalala Statischer Inhalt. Ja ich kann auch die $data variable verwenden:
      $data count: <?php echo count($data); ?>
      Und hier kommt mal ein teil der automatischem Views:
      <?php echo $this->ViewAl->element('Foobaa'?>
    </div>
    Die Plugins sollen neben dem View für die Strukturellen Informationen auch einen default View für das Layout bereitstellen der als Fallback genutzt wird wenn kein View in der App vorhanden ist.
    Aus meinem Beispiel würde dann folglich das entstehen:
    PHP-Code:
    <div>
      
    lalala Statischer InhaltJa ich kann auch die $data variable verwenden:
      
    $data count2
      Und hier kommt mal ein teil der automatischem Views
    :
      <
    div class="accordion">
        <
    h1>Foo</h1>
        <
    div>FooContent</div>
        <
    h1>Baa</h1>
        <
    div>BaaContent</div>
      </
    div>
    </
    div
    Ich wollte einfach mal Fragen was ihr von der Idee haltet. Verbesserungsvorschläge? Oder ob ihr denkt so etwas ist sinnvoll.

    Vielen Dank im voraus!
    CEO @ XTAIN oHG

  • #2
    Ich wollte einfach mal Fragen was ihr von der Idee haltet.
    Gar nichts - Das hört sich einfach nach Template-Engine an..

    und sich automatisch an das Design der ganzen Website anpassen.
    Wie denn das? Die Module wissen doch nichts vom Design Deiner Website. Und wenn Du ihnen das erst beibringen musst, kannst Du gleich richtiges html schreiben, ohne den Umweg über diese Template-Sprache. Sieht mir etwas von APF oder Prado abgekupfert aus. Da werden letztendlich auch nur irgendwelche Tags geparst..

    Kommentar


    • #3
      Dazu fallen mir folgende Fragen ein:
      • Warum braucht es ein Plugin um generische View-Strukturen zu bauen?
      • Warum beschränkst du dich auf eine Ebene der View-Abstraktion?
      • Warum nutzt du nicht HTML/CSS um Elemente Design-technisch zu abstrahieren?
      • Warum mischst du HTML- mit PHP-Framenten, die geparst und ausgewertet werden müssen?

      Mir scheint die Idee nicht wirklich schlüssig zu sein, gerade im Hinblick, dass es bereits vorhandene und bessere Tools gibt.
      Viele Grüße,
      Dr.E.

      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      1. Think about software design [B]before[/B] you start to write code!
      2. Discuss and review it together with [B]experts[/B]!
      3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
      4. Write [I][B]clean and reusable[/B][/I] software only!
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      Kommentar


      • #4
        Ich habe gerade nochmal etwas überlegt.
        Die Plugins geben eine Empfehlung für die Darstellungsart (ob als Liste, Einzelner Beitrag usw) für bestimmte Elemente des Views.
        Es gibt ein für jede Darstellungsart ein eigenes Template. Dieses Template wird von der App gestellt ist nicht in den Plugins enthalten und kann auf das Design der App angepasst werden.

        Nun lässt sich im View an den Stellen mit einem kurzen Befehl entweder die Empfehlung für die Darstellung nutzen (Das Plugin stellt nur die Daten dafür bereit. Das Design für eine Darstellungsart ist für die ganze App verfügbar) oder man gibt eine eigene Darstellungsart an.

        Den Sinn zeige das mal an folgendem Beispiel:

        Ich habe zwei Plugins (z.b. Comments und Board) . Das Board Plugin stellt seine Threads als Beiträge dar. Das Comments Plugin seine Comments als Beiträge.

        Nun muss nur einmal in der App ein Design für die Beitragsansicht entworfen werden und es wird automatisch von dem Comments und Board Plugin genutzt.
        Außerdem sollen die Plugins auch ein Standart Layout für die Anordnung der verschiedenen Elemente bieten.

        Die Frage ist wie ich jetzt das jetzt am sinnvollsten aufbaue damit das auch Arbeit erspart.
        Ziel ist es eigentlich eine Möglichkeit zu finden Plugins fertig zu machen einfach in das Projekt zu werfen und sie funktionieren einfach ohne an ihnen etwas machen zu müssen.
        CEO @ XTAIN oHG

        Kommentar


        • #5
          Jetzt verstehe ich, was Du meinst. Das hört sich gar nicht so schlecht an. Das einzige Problem, das ich sehe ist, dass oft html-Bausteine benötigt werden, die sich aber trotzdem marginal unterscheiden. Und so eine "Beitragsansicht" ist schon so dermaßen speziell, dass sie doch für jede Applikation angelegt werden müsste, wenn sie nicht im Plugin bereits integriert ist.

          EDIT: Ein Bsp.: Wie ich es schon im Beruf erlebt habe. Eine gefloatete Liste von Dingen - Einmal mit 3, einmal mit 5 Einträgen pro Zeile. Das sind schon mal in der Umsetzung Unterschiede. Aber vielleicht ließe sich das ja noch lösen. Aber: Was ist, wenn sich die Liste mit 3 Einträgen pro Zeile noch mal unterscheiden lassen können soll? Da beißt sich dann der Hund in den Schwanz - Du könntest zwar immer mehr Ausnahmen hinzufügen, aber das Konzept der Einfachheit wird dann über den Haufen geworfen..

          Für rel. einfache Strukturen könnte ich mir das aber durchaus vorstellen.

          Kommentar


          • #6
            Naja es ziehlt auf sich wiederholende Darstellungsarten ab.
            Wenn ein Plugin etwas als Threadansicht darstellen will dann gibt es das Template für die Threadansicht einmal. Die kann dann öfter verwendet werden.
            z.b. vom Comments und vom Board Plugin.

            Die Plugins stellen kein HTML bereit sondern empfehlen nur eine Art der Darstellung.

            Wie dann eine Threadansicht aussieht muss dann einmal in der App festgelegt werden.
            CEO @ XTAIN oHG

            Kommentar


            • #7
              Die Plugins stellen kein HTML bereit sondern empfehlen nur eine Art der Darstellung.
              Das ist schon klar. Aber trotzdem wird es darauf hinaus laufen, dass dann für die meisten Module in einer App eine separate Ansicht implementiert werden muss. Das meine ich.

              Kommentar

              Lädt...
              X