APFel-SMS - SiteManagementSystem Erweiterung

Dieser Bereich dient dazu, eure Tricks und Erweiterungen vorzustellen, damit diese auch andere Anwender nutzen können. // This area can be used to publish your tricks and extensions to the APF to be used by other developers.
Benutzeravatar
jwlighting
Beiträge: 466
Registriert: 14.07.2010, 14:23:58
Wohnort: LK Oldenburg
Kontaktdaten:

Re: APFel-SMS - SiteManagementSystem Erweiterung

Beitrag von jwlighting » 04.08.2012, 15:14:53

Hallo Christian,

dein Delay war gar kein Problem, ich hatte eh mit meinem Rechner zu kämpfen. Mittlerweile läuft alles wieder soweit im neuen System, ich hatte von openSuSE mit KDE zu LinuxMint mit MATE-Desktop (Gnome2-Fork) gewechselt. Ich komme also auch wieder an meine Daten vernünftig dran, und kann dir hier etwas mehr Beispiele liefern.
Jetzt aber wieder zu den wichtigen Dingen des Lebens... :?
Du kannst natürlich auch die Site mit dem DISM erstellen lassen. Dann ist das Thema Auflösen von Abhängigkeiten ohnehin kein Problem.
Genau das mache ja gerade.

Ich habe folgende Objekte (ich verwende hier mal die Namen der Interfaces, sofern vorhanden) mit den darunter gelisteten Abhängigkeiten untereinander (#) und Konfigurationsmethoden (+) und ausgewählten wichtigen Eigenschaften (-). Alle Abhängigkeiten und Konfigurationen löse ich bereits mittels DISM auf. Dies sind nur die Abhängigkeiten, die ich in Objekteigenschaften halte.

SMSManager:
# SMSMapper
# SMSSite

SMSSite:
+ startPage
+ setWebsiteTitle
- pages []

SMSMapper
+ setDataSourceName // kann ein Dateiname oder Name einer Datenbankverbindung sein

Oder als serviceobjects.ini:

Code: Alles auswählen

[Manager]
namespace = "extensions::apfelsms::biz"
class = "SMSManager"
servicetype = "SINGLETON"

init.mapper.method = "setMapper"
init.mapper.namespace = "extensions::apfelsms"
init.mapper.name = "Mapper"
init.site.method = "setSite"
init.site.namespace = "extensions::apfelsms"
init.site.name = "Site"

setupmethod = "setup"


[Site]
namespace = "extensions::apfelsms::biz::sites"
class = "SMSStdSite"
servicetype = "SINGLETON"

conf.title.method = "setWebsiteTitle"
conf.title.value = "Test-Website"
conf.start.method = "setStartPageId"
conf.start.value = "home"


[Mapper]
namespace = "extensions::apfelsms::data"
class = "SMSXMLMapper"
servicetype = "SINGLETON"

conf.file.method = "setXMLFilename"
conf.file.value = "meine-sitemap.xml"

Dann gibt es weitere Abhängigkeiten einzelner Methoden. Zum Beispiel braucht die Methode SMSSite->setStartPageId() den SMSManager, um von ihm das entsprechende Seiten-DO zu beziehen und ablegen zu können. Dazu wird der Manager einfach in der per DISM bezogen.
Während der Manager nun versucht das Seiten-DO zu beziehen benötigt er seine Abhängigkeit SMSSite um auf die pages-Eigenschaft zuzugreifen, und hier beißt sich die Katze in den Schwanz :D

Es ergibt sich also folgender Ablauf:
  1. Man bezieht den Manager per DISM
  2. Der DISM lädt den Service SMSSite um ihn in den Manager zu injizieren
  3. - Der DISM konfiguriert SMSSite und versucht, die Startseite zu setzen
  4. - Beim Setzen der Startseite wird der Manager geladen
  5. - Der Manager versucht auf seine Abhängigkeit SMSSite zuzugreifen, die ihm aber noch nicht injiziert worden ist.
Das Problem besteht darin, das sich hier ein "Abhängigkeits-Teufelskreis" aufbaut, weil die pages Eigenschaft nicht da ist, wo sie gebraucht wird.
Die Frage ist auch, ob die Site wirklich innerhalb des Managers als Klassen-Member gehalten werden muss. Dies drückt für mich schon eine zu starke Zugehörigkeit aus (Stichwort: stateless). Ob das eine Rolle spielt ist jedoch im Kontext der kompletten Implementierung zu sehen.
Im Kontext der Implementierung sehe ich vor allem gewaltige Einbußen bei der Performance. Das Laden eines Seiten-DO findet im Einsatz der Extension je nach Größe des Seitenbaums recht häufig statt.
Wenn ich dabei jedes mal von neuem den DISM aufrufen muss um an meine pages-Eigenschaft zu kommen, finde ich das nicht so toll ;)
Die kann man dann sowohl dem Webseiten-DO wie auch dem Manager als injizieren.
Ja, versuch das mal. Wobei dann ist die Frage ob die Site nicht grundsätzlich dem SiteStore entspringen sollte. Hier würde ich dann wieder zu einem Store (=Persistenz) und einem "echten" Domänen-Objekt tendieren, das neben den Daten auch die Logik kapselt.
Ich würde die pages-Eigenschaft in einen Store packen, das SMSSite-Objekt bleibt DO. Das wäre dann genau das, was du willst!? ;)
Btw.: Was verstehst du unter Persistenz? Für mich ist das die Überführung der Daten aus der Applikationsschicht in die physische Datenschicht in der die Daten abgelegt werden, solange die Applikation nicht läuft; also bspw. eine Datenbank oder Datei auf der Festplatte - und vice versa.
Ich kann aktuell leider keinen Test aufsetzen, und würde daher gerne auf deine Ergebnisse warten. Sorry, aber bei mir ist gerade einiges los.
Kein Problem. Ich habe letztlich nur das Ablegen in den Cache vom Ende der Methode dorthin verschoben, wo das Objekt vom SM bezogen wird. Finde ich aber im Falle einer später auftretenden Exception sehr ungünstig. ich poste meinen Code später im anderen Thread. Wichtig wäre mir nur, das wir mal probieren, das Problem auf einem anderen System zu reproduzieren.

LG :)

PS@Megger:
Was Christian schrieb ist das aktuelle Thema. Wenn du wissen willst, was sich die Extension vorgenommen hat, empfehle ich den ersten Beitrag des Threads. ;) Sonst einfach nochmal nachfragen.

Menschen irren - Politiker sind Menschen.
Für den Norddeutschen ist 1kW = 2 Pfund Schlick.

Benutzeravatar
jwlighting
Beiträge: 466
Registriert: 14.07.2010, 14:23:58
Wohnort: LK Oldenburg
Kontaktdaten:

Re: APFel-SMS - SiteManagementSystem Erweiterung

Beitrag von jwlighting » 05.08.2012, 12:21:33

Ich habe jetzt mehrere Änderungen implementiert:

1. Es gibt ein neues Interface SMSPageStore mit den Methoden getPage(), setPage() und isPageSet(). Es wird von SMSStdPageStore implementiert. Eine (die selbe) Instanz wird per DI sowohl SMSManager als auch SMS(Std)Site injiziert.
2. Ich speichere nicht mehr die Seiten-DOs in SMSSite (für currentPage, startPage, rootPage), sondern die Seiten IDs (currentPageId, ...). Sont bekomme ich weitere Probleme, da der Manager noch nicht vollständig initialisiert ist.

Ich habe zwar noch keine Logik im Mapper implementiert, bekomme jetzt aber für

test.php

Code: Alles auswählen

include 'apps/core/pagecontroller/pagecontroller.php';

Registry::register('apf::core', 'Environment', 'TEST');

/** @var $SMSM SMSManager */
$SMSM = DIServiceManager::getServiceObject('extensions::apfelsms', 'Manager', 'DEFAULT', 'de');
$SMSM->getSite()->getStartPage();
$SMSM->getPage('about');

print_r($SMSM);
 
mit

apps/config/extensions/apfelsms/TEST_serviceobjects.ini

Code: Alles auswählen

[Manager]
namespace = "extensions::apfelsms::biz"
class = "SMSManager"
servicetype = "SINGLETON"

init.pageStore.method = "setPageStore"
init.pageStore.namespace = "extensions::apfelsms"
init.pageStore.name = "PageStore"
init.mapper.method = "setMapper"
init.mapper.namespace = "extensions::apfelsms"
init.mapper.name = "Mapper"
init.site.method = "setSite"
init.site.namespace = "extensions::apfelsms"
init.site.name = "Site"

setupmethod = "setup"


[Site]
namespace = "extensions::apfelsms::biz::sites"
class = "SMSStdSite"
servicetype = "SINGLETON"

init.pageStore.method = "setPageStore"
init.pageStore.namespace = "extensions::apfelsms"
init.pageStore.name = "PageStore"

conf.title.method = "setWebsiteTitle"
conf.title.value = "Test-Website"
conf.start.method = "setStartPageId"
conf.start.value = "home"

[PageStore]
namespace = "extensions::apfelsms::biz::pages::stores"
class = "SMSStdPageStore"
servicetype = "SINGLETON"

[Mapper]
namespace = "extensions::apfelsms::data"
class = "SMSXMLMapper"
servicetype = "SINGLETON"

conf.file.method = "setXMLFilename"
conf.file.value = "meine-sitemap.xml"
folgende Ausgabe:

Code: Alles auswählen

/usr/bin/php /srv/www/htdocs/apf-devel/test.php
SMSManager Object
(
    [mapper:protected] => SMSXMLMapper Object
        (
            [filename:protected] => meine-sitemap.xml
            [__Attributes:protected] => Array
                (
                )

            [__Context:protected] => DEFAULT
            [__Language:protected] => de
            [serviceType:protected] => SINGLETON
            [isInitialized:protected] => 
        )

    [site:protected] => SMSStdSite Object
        (
            [pageStore:protected] => SMSStdPageStore Object
                (
                    [pages:protected] => Array
                        (
                            [home] => SMSStdPage Object
                                (
                                    [id:protected] => home
                                    [title:protected] => 
                                    [js:protected] => Array
                                        (
                                        )

                                    [css:protected] => Array
                                        (
                                        )

                                    [__Parent:protected] => 
                                    [__Children:protected] => Array
                                        (
                                        )

                                    [__Attributes:protected] => Array
                                        (
                                        )

                                    [__Context:protected] => DEFAULT
                                    [__Language:protected] => de
                                    [serviceType:protected] => NORMAL
                                    [isInitialized:protected] => 
                                )

                            [about] => SMSStdPage Object
                                (
                                    [id:protected] => about
                                    [title:protected] => 
                                    [js:protected] => Array
                                        (
                                        )

                                    [css:protected] => Array
                                        (
                                        )

                                    [__Parent:protected] => 
                                    [__Children:protected] => Array
                                        (
                                        )

                                    [__Attributes:protected] => Array
                                        (
                                        )

                                    [__Context:protected] => DEFAULT
                                    [__Language:protected] => de
                                    [serviceType:protected] => NORMAL
                                    [isInitialized:protected] => 
                                )

                        )

                    [__Attributes:protected] => Array
                        (
                        )

                    [__Context:protected] => DEFAULT
                    [__Language:protected] => de
                    [serviceType:protected] => SINGLETON
                    [isInitialized:protected] => 
                )

            [websiteTitle:protected] => Test-Website
            [currentPageId:protected] => home
            [startPageId:protected] => home
            [rootPageId:protected] => 
            [__Attributes:protected] => Array
                (
                )

            [__Context:protected] => DEFAULT
            [__Language:protected] => de
            [serviceType:protected] => SINGLETON
            [isInitialized:protected] => 
        )

    [pageStore:protected] => SMSStdPageStore Object
        (
            [pages:protected] => Array
                (
                    [home] => SMSStdPage Object
                        (
                            [id:protected] => home
                            [title:protected] => 
                            [js:protected] => Array
                                (
                                )

                            [css:protected] => Array
                                (
                                )

                            [__Parent:protected] => 
                            [__Children:protected] => Array
                                (
                                )

                            [__Attributes:protected] => Array
                                (
                                )

                            [__Context:protected] => DEFAULT
                            [__Language:protected] => de
                            [serviceType:protected] => NORMAL
                            [isInitialized:protected] => 
                        )

                    [about] => SMSStdPage Object
                        (
                            [id:protected] => about
                            [title:protected] => 
                            [js:protected] => Array
                                (
                                )

                            [css:protected] => Array
                                (
                                )

                            [__Parent:protected] => 
                            [__Children:protected] => Array
                                (
                                )

                            [__Attributes:protected] => Array
                                (
                                )

                            [__Context:protected] => DEFAULT
                            [__Language:protected] => de
                            [serviceType:protected] => NORMAL
                            [isInitialized:protected] => 
                        )

                )

            [__Attributes:protected] => Array
                (
                )

            [__Context:protected] => DEFAULT
            [__Language:protected] => de
            [serviceType:protected] => SINGLETON
            [isInitialized:protected] => 
        )

    [currentConfigSection:SMSManager:private] => IniConfiguration Object
        (
            [values:BaseConfiguration:private] => Array
                (
                )

            [sections:BaseConfiguration:private] => Array
                (
                )

        )

    [__Attributes:protected] => Array
        (
        )

    [__Context:protected] => DEFAULT
    [__Language:protected] => de
    [serviceType:protected] => SINGLETON
    [isInitialized:protected] => 
)

Process finished with exit code 0
Bitte um Rückmeldung - ich würde jetzt gerne den Mapper "erledigen".
EDIT: Vorm Mapper mache ich mich schon mal an die DI-Konfiguration für Pages und PageDecorators

LG :)
Jan

Menschen irren - Politiker sind Menschen.
Für den Norddeutschen ist 1kW = 2 Pfund Schlick.

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

Re: APFel-SMS - SiteManagementSystem Erweiterung

Beitrag von dr.e. » 07.08.2012, 22:40:17

Hi Jan,
Genau das mache ja gerade.
OK, dann passt das.
Ich würde die pages-Eigenschaft in einen Store packen, das SMSSite-Objekt bleibt DO. Das wäre dann genau das, was du willst!?
Das wäre hinsichtlich der Modellierung sauberer - ja.
Btw.: Was verstehst du unter Persistenz? Für mich ist das die Überführung der Daten aus der Applikationsschicht in die physische Datenschicht in der die Daten abgelegt werden, solange die Applikation nicht läuft; also bspw. eine Datenbank oder Datei auf der Festplatte - und vice versa.
Dann verstehen wir das genauso - siehe IDSingleton-Diskussion.
Bitte um Rückmeldung - ich würde jetzt gerne den Mapper "erledigen".
Grundsätzlich einverstanden.
Viele Grüße,
Christian

Benutzeravatar
jwlighting
Beiträge: 466
Registriert: 14.07.2010, 14:23:58
Wohnort: LK Oldenburg
Kontaktdaten:

Re: APFel-SMS - SiteManagementSystem Erweiterung

Beitrag von jwlighting » 07.08.2012, 22:59:33

Grundsätzlich einverstanden.
Da wärst du auch zu spät gewesen.

Ich habe dir meine derzeitige Implementierung mal ge-tar-gz-tet ( ;) ). Werf doch mal einen Blick rein, wie der Mapper eingebunden ist.
beispielconfig findest du auch.

Ist noch nicht vollständig getestet, Fehler also wahrscheinlich.

LG :)
Jan

EDIT: Neuen, aktuellen Stand hochgeladen.
Dateianhänge
apfelsms.tar.gz
APFelSMS Stand vom 13.08.12 (v0.3-beta)
(13.48 KiB) 46-mal heruntergeladen
Zuletzt geändert von jwlighting am 13.08.2012, 18:05:48, insgesamt 2-mal geändert.

Menschen irren - Politiker sind Menschen.
Für den Norddeutschen ist 1kW = 2 Pfund Schlick.

Benutzeravatar
jwlighting
Beiträge: 466
Registriert: 14.07.2010, 14:23:58
Wohnort: LK Oldenburg
Kontaktdaten:

Re: APFel-SMS - SiteManagementSystem Erweiterung

Beitrag von jwlighting » 12.08.2012, 12:04:32

Ich bin mittlerweile an einigen Taglibs dran, und es gab auch noch Änderungen/Ergänzungen der API.
Es gibt also bald wieder eine "neue Version". Bis dahin möchte ich aber soweit sein, das ich "RC" dahinter schreiben kann, die soll also auch ein wenig getestet sein.

Eine Doku verfasse ich im Wiki?

Ich überlege noch, ob eine Vererbung von Eigenschaften wie Stylesheets, Scripts und vorallem Zugriffsschutzstatus von den Vätern zu den Kindern sinnvoll ist.
Welche Meinung habt ihr dazu? Sollte die Vererbung dann fest sein, oder konfigurierbar?

LG :)
Jan

Menschen irren - Politiker sind Menschen.
Für den Norddeutschen ist 1kW = 2 Pfund Schlick.

Benutzeravatar
jwlighting
Beiträge: 466
Registriert: 14.07.2010, 14:23:58
Wohnort: LK Oldenburg
Kontaktdaten:

Re: APFel-SMS - SiteManagementSystem Erweiterung

Beitrag von jwlighting » 13.08.2012, 18:03:33

Ich habe oben nochmal den aktuellen Stand hochgeladen. Die Taglibs sind jetzt alle getestet, und bis auf eine Fehlende schon vollständig. Die normale Benutzung beschrängt sich auf die Nutzung der Taglibs, d.h. man braucht keine eigenen Controller etc. - hat aber trotzdem die Möglichkeit, die umfangreiche API zu benutzen, sofern man eigene Funktionen ergänzen will.

LG :)
Jan

Menschen irren - Politiker sind Menschen.
Für den Norddeutschen ist 1kW = 2 Pfund Schlick.

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

Re: APFel-SMS - SiteManagementSystem Erweiterung

Beitrag von dr.e. » 13.08.2012, 22:12:08

Hi Jan,

Code sehe ich mir morgen im Zug an.
Viele Grüße,
Christian

Benutzeravatar
jwlighting
Beiträge: 466
Registriert: 14.07.2010, 14:23:58
Wohnort: LK Oldenburg
Kontaktdaten:

Re: APFel-SMS - SiteManagementSystem Erweiterung

Beitrag von jwlighting » 14.08.2012, 11:27:36

Dann freue ich mich schon auf Rückmeldung ;)

Doku ins Wiki ist richtig? Oder kommt die auf die APF-Dokuseite?

LG :)
Jan

Menschen irren - Politiker sind Menschen.
Für den Norddeutschen ist 1kW = 2 Pfund Schlick.

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

Re: APFel-SMS - SiteManagementSystem Erweiterung

Beitrag von dr.e. » 15.08.2012, 19:11:07

Hi Jan,

sofern du das APFel-SMS als Extension veröffentlichen möchtest den Code ins SVN und die Doku im Wiki, falls du daraus ein eigenes OS-Projekt erzeugen möchtest gerne auch auf deiner Seite/bei sourceforge.net/etc.

Feedback folgt.
Viele Grüße,
Christian

Benutzeravatar
jwlighting
Beiträge: 466
Registriert: 14.07.2010, 14:23:58
Wohnort: LK Oldenburg
Kontaktdaten:

Re: APFel-SMS - SiteManagementSystem Erweiterung

Beitrag von jwlighting » 15.08.2012, 20:15:42

Moin!
sofern du das APFel-SMS als Extension veröffentlichen möchtest den Code ins SVN und die Doku im Wiki
Ja, so hatte ich mir das gedacht - wenn das "Teil" Anklang findet und wächst, kann man es immer noch auslagern. Doku also ins Wiki.
SVN-Zugang habe ich nicht, und mir fehlt dazu auch nach wie vor der Überblick und ab heute auch die Zeit, das in nächster Zeit zu tun (Ausbildungsbeginn).
Ich könnte mir aber vorstellen, falls möglich, wenn ich nur auf das Extensions-Verzeichnis RW-Zugriff hätte. Mir ist eibnfach wichtig, dass ich nix kaputt mache :D
falls du daraus ein eigenes OS-Projekt erzeugen möchtest gerne auch auf deiner Seite/bei sourceforge.net/etc
Eigene Seite? Welche :? Da fehlte es bisher an Zeit und Webspace für. Aber schau'n wir mal, zumindest das Problem mit den Webspace-Kosten ließe sich jetzt ja als gelöst betrachten (s.o.) ;)
Feedback folgt.
Die Spannung steigt ;) Freu mich drauf.

LG :)
Jan

Menschen irren - Politiker sind Menschen.
Für den Norddeutschen ist 1kW = 2 Pfund Schlick.

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

Re: APFel-SMS - SiteManagementSystem Erweiterung

Beitrag von dave » 15.08.2012, 21:05:40

Die SVN-Thematik ist ziemlich easy. Ich hatte damit am Anfang auch Berührungsängste. Aber nach meinem letzten check-in habe ich die für mich wichtigsten Funktionen komplett verstanden. Wenn du magst, erstelle ich dir mal ein kleinen Tut mit Bildern auf Basis des Tortoise SVN.

Und, kaputt machen kannst du nicht, Christian kann jeden Vorgang manuell rückgängig machen, gerade das ist das schöne am SVN, alles wird protoklliert ;)

Benutzeravatar
jwlighting
Beiträge: 466
Registriert: 14.07.2010, 14:23:58
Wohnort: LK Oldenburg
Kontaktdaten:

Re: APFel-SMS - SiteManagementSystem Erweiterung

Beitrag von jwlighting » 15.08.2012, 22:48:35

Dank dir, die Sache mit den Berührungsängsten stimmt sicher auch ;) Das man alles rückgängig machen kann liegt ja im Kern der Sache, trotzdem ist es Arbeit für Christian, und die kann er sinnvoller einsetzen.

Für ein kleines Tutorial dazu wäre ich dir sehr dankbar. (Wie man das dann in PhpStorm macht, werde ich schon selber herausfinden, sofern du da Zugang zu hast, wäre das natürlich ideal)

LG :)
Jan

Menschen irren - Politiker sind Menschen.
Für den Norddeutschen ist 1kW = 2 Pfund Schlick.

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

Re: APFel-SMS - SiteManagementSystem Erweiterung

Beitrag von dr.e. » 15.08.2012, 23:57:26

[..]trotzdem ist es Arbeit für Christian, und die kann er sinnvoller einsetzen.
Keine Angst bitte, das rückgängig machen hat mich 2Min gekostet - kein Ding also! Am Besten installierst du dir einen SVN-Client wie z.B. TortoiseSVN und meldest dich bei sourceforge.net an. Mit deinem Benutzer kann ich dir anschließend die Berechtigung einrichten.
Viele Grüße,
Christian

Benutzeravatar
jwlighting
Beiträge: 466
Registriert: 14.07.2010, 14:23:58
Wohnort: LK Oldenburg
Kontaktdaten:

Re: APFel-SMS - SiteManagementSystem Erweiterung

Beitrag von jwlighting » 16.08.2012, 20:32:45

... hat mich 2Min gekostet ...
:? Wie konnt ich da jetzt schon was verdrehen?
Am Besten installierst du dir einen SVN-Client wie z.B. TortoiseSVN und meldest dich bei sourceforge.net an. Mit deinem Benutzer kann ich dir anschließend die Berechtigung einrichten.
Können wir so machen. Jetzt warte ich aber erstmal auf das Feedback.

LG :)
Jan

Menschen irren - Politiker sind Menschen.
Für den Norddeutschen ist 1kW = 2 Pfund Schlick.

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

Re: APFel-SMS - SiteManagementSystem Erweiterung

Beitrag von dave » 16.08.2012, 21:34:28

Bin schon am Howto dran. Gibts im Wiki. Ist aber noch nicht fertig, den Commit (Updaten der Dateien) mache ich morgen.

http://wiki.adventure-php-framework.org ... ortoiseSVN

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast