Core Dateien bearbeiten? Nein! Override? Wie? :(

Hallo,

 

ich bin hier noch ganz neu.

Ich habe eine lokale Elgg Installation und bin auf dem besten Wege diese bald online zu stellen.

Bisher hatte ich immer das Glück, dass ich Plugins für Dinge gefunden habe, die ich machen wollte.

Nun war ich aber schon länger am Suchen einer Funktion:

Der River (Riverdashboard) soll nicht "Alle" anzeigen, sondern nur die Einträge des Users selbst und seiner Freunde.
Dazu habe ich hier* etwas tolles gefunden, nur leider müssten dazu die Core Files bearbeitet werden. Das geht natürlich nicht (Gründe klar auf der Hand: Updates, etc.).

Nun, die Lösung liegt auf der Hand: Ein Plugin!

Nur: Wie erreiche ich es, dass ich dem PlugIn sage, pass auf, überschreib die nötigen Dateien?


Habt ihr eine Anleitung dazu?

 

Vielen Dank für eure Hilfe!


* http://community.elgg.org/discussion/view/351203/set-river-items-to-friends-only
(Falls jemand nicht drauf klicken kann ;-) )

  • Ist die Community schon nicht mehr lebendig? :-(

  • Die deutsche Fraktion der Community ist nicht ganz tot aber halt sehr klein...

    "Override" funktioniert nur bei Views. Im Prinzip kannst Du eine View überschreiben, indem Du innerhalb eines anderen Plugins die gleiche View (gleicher Name und gleiche Position innerhalb des View-Verzeichnisses) verwendest. Im Prinzip mußt Du also Dein eigenes kleines Plugin entwickeln, dass die View ersetzt, die nicht Deinen Anforderungen entspricht. "Override" ersetzt eine View vollständig. Die andere Möglichkeit ist, die View zu erweitern, d.h. der Code Deiner View wird an die andere View angehängt (das ist der Standard, es ist aber auch möglich, dass der neue Code vor dem anderen Code eingefügt wird). Um eine View zu erweitern, mußt Du die zu erweiternde View und die Deine View mit Hilfe der Funktion elgg_extend_view definieren (in der init-Funktion in start.php).

    Falls Du Änderungen in anderen Dateien als Views vornehmen willst (Actions, start.php, libraries), mußt Du wohl oder über Deine eigene Kopie dieses Plugins schreiben. Du kannst mit dem Code des originalen Plugins beginnen und dann den Code anpassen, wo es notwendig ist (z.B. Ändern von Funktionsnamen ensprechend Deinem Plugin) und dann schlußendlich den Teil des Codes im Plugin anpassen, der nicht Deinen Anforderungen entspricht.

  • Vielen Dank für deine Antwort!

    Das habe ich mir fast schon gedacht, dass hier nicht so viele sind - wobei aber die gesamte Community auch nicht so riesig groß ist!

    Nun denn,
    in diesem Fall wäre es ja - wenn mich nicht alles täuscht - eine View und genau die perfekte Aufgabe dafür.

    Muss ich aber tatsächlich auch die gesamte "Struktur" eines Plugins übernehmen (start.php, die xml-Dateien etc.)? Also nicht einfach mal kurz einen Ordner und eine Kopie erstellt, die nötigen Änderungen vorgenommen, in den Mod Ordner verschoben und fertig is?

  • Der Minimalumfang eines Elgg-Plugins ist eine start.php (und die darin enthaltenen Init-Funktion) und die Pluginbeschreibung (manifest.xml). Die Init-Funktion mußt Du umbenennen (darf nicht zweimal gleich heißen) und die manifest.xml mußt Du auch anpassen (Pluginname etc.).

    Wenn Du nur eine View ersetzen willst, kann die Init-Funktion durchaus nur aus dem Funktionsheader bestehen, aber sie muss vorhanden sein.

    start.php beispielsweise so:

    <?php

    elgg_register_event_handler('init', 'system', 'hide_all_tab_init');

    function hide_all_tab_init() {

    }

    Der Link, den Du in Deinem ersten Posting angegeben hast, verweist auf eine Anleitung, die inzwischen veraltet ist, d.h. in Elgg 1.8 wirst Du die angegebenen Dateien nicht mehr finden. Stattdessen sollte der Code in /views/default/page/layouts/content/filter.php zu finden sein (nicht selbst ausprobiert). In Deinem Plugin mußt Du also neben start.php und manifest.xml auch noch eine Kopie dieser View übernehmen. Die Kopie muss in die folgende Unterorderstruktur: mod/hide_all_tab//views/default/page/layouts/content/filter.php (unter der Annahme dass Du Dein Plugin "mide_all_tab" nennst). In der Kopie ist dann das 'all'-Element im Array zu entfernen.

German Support Group

German Support Group

The German support group within the Elgg community.