Ankündigung

Einklappen
Keine Ankündigung bisher.

Bester Weg für ein Widget-System in cms

Einklappen

Neue Werbung 2019

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

  • Bester Weg für ein Widget-System in cms

    Hallo Leute,

    ich bin seit paar wochen beschäftigt ein Widget-System für einen Forum-CMS(xenForo - Zend Framework) zu erstellen.

    Momentan ist es so, dass ich manuell die html code von dem widget in der DB eingetragen habe, und dieser wird dann ausgegeben.

    Meine Fragen wären:

    Wie kann ich am besten das Widget-System gestalten

    1. Ich möchte alle widgets als /widgets/[widget-verzeichnis1] speichern
    2. Das System soll automatisch erkennen ob es was neues da gibt und es evtl. installieren
    3. Das Systemm soll für jedes widget eine funktion "generateHTML" oder so was aufrufen um die HTML-code generieren zu lassen.

    Ich möchte es so ähnlich wie beim wordpress machen. Geht es in der richtige richtung oder wie gestaltet man so ein widget System am besten?

    Danke für eure Antworten
    Hoffe dass der Post in die Richtige Kategorie ist


  • #2
    Hallöchen,

    Zitat von bukso Beitrag anzeigen
    ich bin seit paar wochen beschäftigt ein Widget-System für einen Forum-CMS(xenForo - Zend Framework) zu erstellen.
    Für spezifische Fragen zum verwendeten System bist du in den entsprechenden Community-Foren besser aufgehoben.

    Zitat von bukso Beitrag anzeigen
    Momentan ist es so, dass ich manuell die html code von dem widget in der DB eingetragen habe, und dieser wird dann ausgegeben.
    Wieso legst du die HTML-Templates nicht im Dateisystem ab?

    Zitat von bukso Beitrag anzeigen
    1. Ich möchte alle widgets als /widgets/[widget-verzeichnis1] speichern
    Das Verzeichnis ist erstmal wurscht, wobei eine klare Konvention Punkt #2 quasi von selbst löst.

    Zitat von bukso Beitrag anzeigen
    2. Das System soll automatisch erkennen ob es was neues da gibt und es evtl. installieren
    Beim Aufrufen der Widget-Administration kannst du das Verzeichnis doch einfach nach unbekannten Widgets durchsuchen und den Admin darauf hinweisen.

    Zitat von bukso Beitrag anzeigen
    3. Das Systemm soll für jedes widget eine funktion "generateHTML" oder so was aufrufen um die HTML-code generieren zu lassen.
    Das Rendern von HTML-Templates fällt meiner Meinung nach in die Zuständigkeit einer Template-Engine. Vielleicht reicht es wenn du eine Schnittstelle schaffst, welche einfach nur die Daten für das Widget liefert, womit dessen Template anschließend gerendert wird. In der einfachsten Form könnte das bspw. so aussehen:

    PHP-Code:
    <?php

    // The contract
    interface Widget{
        public function 
    getData();
    }

    // WeatherWidget/widget.php
    class WeatherWidget implements Widget{
        public function 
    getData(){
            return[
                
    'DE' => [
                    
    'München' => [
                        
    'temperature' => 10,
                        
    'description' => 'Bewölkt, regnerisch'
                    
    ]
                ]
            ];
        }
    }

    // WeatherWidget/template.html
    <div>
        {% for 
    countrycities in countries %}
            {% for 
    citydata in cities %}
                <
    p>
                    
    Das Wetter in {{city}}:<br>
                    <
    b>{{data.temperature}}</b><br>
                    {{
    data.description}}
                </
    p>
            {% endfor %}
        {% endfor %}
    </
    div>
    So könnte das Ganze intern aufgebaut sein:
    PHP-Code:
    $widgets = [
        
    'WeatherWidget',
        ..
    ];

    $output '';
    foreach(
    $widgets as $widgetClass){
        
    /**
         * An dieser Stelle wird eine Instanz des Widgets erzeugt. Durch den Einsatz von
         * Auto-Wiring könnte man dem Widget-Entwickler nun sogar die Möglichkeit bieten,
         * alle systemweiten Objekte die er innerhalb seines Widgets ansprechen möchte,
         * direkt in das Objekt zu injizieren. Dies kann u.A. nützlich sein um Entscheidungen
         * anhand der Nutzer-Einstellungen zu treffen.
         */
        
    $widget $di->make($widgetClass);

        
    /**
         * Hier wird zunächst sichergestellt, dass das Widget-Interface auch implementiert
         * wurde. Anschließend werden die Daten abgerufen und das Template gerendert.
         */
        
    if($widget instanceof Widget){
            
    $data $widget->getData();
            
    $output .= $engine->render($widgetClass '/template.html'$data);
        }

    Zitat von bukso Beitrag anzeigen
    Ich möchte es so ähnlich wie beim wordpress machen. Geht es in der richtige richtung oder wie gestaltet man so ein widget System am besten?
    Dass du es überhaupt wagst WordPress im Software-Design Forum auch nur zu erwähnen..

    Viele Grüße,
    lotti

    Kommentar


    • #3
      Zitat von bukso Beitrag anzeigen
      1. Ich möchte alle widgets als /widgets/[widget-verzeichnis1] speichern
      2. Das System soll automatisch erkennen ob es was neues da gibt und es evtl. installieren
      3. Das Systemm soll für jedes widget eine funktion "generateHTML" oder so was aufrufen um die HTML-code generieren zu lassen.
      t
      Ich würde dir empfehlen dir das bei Joomla mal anzusehen. Dort wird das recht elegant gemacht.

      Dort werden Module, im Endeffekt das gleiche wie Widgets im Ordner modules/mod_{mod_name} abgelegt. Dann ergibt sich dort eine MVC Aufteilung.

      Bsp.:

      Modulname: User Counter

      Verzeichnisstruktur:

      modules/mod_ucounter
      modules/mod_ucounter/tmpl/default.php - View welche das HTML für die Standardview enthält
      modules/mod_ucounter/tmpl/detail.php - View, welche bei Klick Detailinformationen lädt, kann auch über ajax geladen werden...
      modules/mod_ucounter/helper.php - repräsentiert das Model, dass die Daten aufbereitet;
      modules/mod_ucounter/mod_ucounter.php - der Controller, der die angeforderte View mit den Daten aus dem Helper verbindet.

      Das ist nur ein Beispiel, man muss das je nach Verwendung und bedarf sehen.
      Homepage: www.jplace.de

      Github: JohnnyDevNull

      Kommentar


      • #4
        Zitat von bukso Beitrag anzeigen
        2. Das System soll automatisch erkennen ob es was neues da gibt und es evtl. installieren
        Das würde ich dir mittels XML- oder auch YAML-Manifest Dateien empfehlen.

        Als Anregung: http://docs.joomla.org/Manifest_files

        Somit kannst du gezielt steuern was du in deine Anwendung lassen möchtest und was nicht.
        Homepage: www.jplace.de

        Github: JohnnyDevNull

        Kommentar

        Lädt...
        X