Eliwood hat geschrieben:
Jetzt kommen se alle aus den Löchern gekrochen
Ich bin einer der wenigen die hier tatsächlich täglich reinschauen
und in meiner Facebook Gruppe habe ich sogar seit paar Wochen ein Beta-Test für 0.97er Module am laufen
Eliwood hat geschrieben:
@Email: Die PHP-Funktion filter_var validiert nicht nach RFC5321. Das wollte ich unbedingt vermeiden.
Du benutzt den Regex von Michael Rushton, der auch E-Mail wie z.B. "name@local" akzeptiert. Und das ist gegen RFC5321.
Die PHP Version (ab PHP 5.3.?) ist besser:
https://github.com/php/php-src/blob/mas ... _filters.c$this->bbcode_second_pass_code('', '
void php_filter_validate_email(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
{
/*
* The regex below is based on a regex by Michael Rushton.
* However, it is not identical. I changed it to only consider routeable
* addresses as valid. Michael's regex considers a@b a valid address
* which conflicts with section 2.3.5 of RFC 5321 which states that:
*
* Only resolvable, fully-qualified domain names (FQDNs) are permitted
* when domain names are used in SMTP. In other words, names that can
* be resolved to MX RRs or address (i.e., A or AAAA) RRs (as discussed
* in Section 5) are permitted, as are CNAME RRs whose targets can be
* resolved, in turn, to MX or address RRs. Local nicknames or
* unqualified names MUST NOT be used.
*/
')
Wie du siehst ist die PHP Version nicht nur besser, sondern auch schneller.
Und sie wird mit Updates angepasst, so dass man auch in Zukunft dabei ist und nicht dauernd den RegEx anpassen muss
Eliwood hat geschrieben:
@Dynamisch aus Datenbank generieren: Wie hast du die Logik in der Datenbank untergebracht? Metasprache, die Daten verändern/prüfen darf, direktes PHP und dann eval?
Eval würde ich nie im Leben verwenden, auch kein Code in der DB oder Metasprache.
Man hat einfach Tabellen, Pages, Navs, Modules, Modules_Pages usw.
Ablauf:
1) Page mit ID aus Pages laden, und daraus ein Objekt generieren, der Klasse Pages
2) Funktion des Objekts aufrufen, ob der User Zugriff auf diese Seite hat.
3) Nein: Badnav Ja: gehe zu Navs generieren.
Navs generieren:
1) Lade Navs aus Pages_Navs where from = ID, and Module = active aus der Modules Table
2) Check die Rechte und Anforderungen, erfüllt => dann addnav
3) gehe zu generiere die Seite
Seite generieren:
1) Lade alle Module aus Module_Pages mit der PageID = ID, dessen ModulID in der Tabelle Moduls active = 1 hat, ORDERED BY sort ASC.
2) Lade für jedes Modul die angegeben Modul-Klasse und initialisere ein Object mit Config eine json encoded array in der Tabelle Module_Pages. Diese Config ist für jede Page einzelnd configurierbar in der Grotte.
3) Frage dem Objekt ob die Anforderungen des Moduls erfüllt sind (User Rechte, gewisse Bedingungen wie Zeit, Wetter, Dragonkills usw)
4) Jedes Modul bietet über hooks die Möglichkeit weitere Module über Module_Hooks zu laden
5) Anforderungen erfüllt generiere output und packe es ins content
-> Gebe Seite aus
Neben den Page_Modules gibt es natürlich auch globale Module und Plugins, welche bei jedem Aufruf geladen werden.
Das ist wichtig um die Configuration so schlank wie möglich zu halten.
Und schwupps, hats du ein Dynamische Lotgd, welches nur aus einer PageFactory und lauter einzel Module und Plugins (welche in Module hooken) besteht.
Der Rest läuft über Editoren in der Grotte.
Noch schöner und wahre PHP Magie ist mein Form Generator, Validator und insert/update automatismus direkt aus der Datenbank raus.
Einfach new DBRow('accounts',ID)->show_editor() oder DBRows('accounts')->show_table(edit=true) und andere schöne Sachen
(Auch wenn ich das in Code geschrieben habe ist es ebenfalls dynamisch, einfach als Modul zu laden. Nichts ist im Code fest codiert.)
Aber dafür braucht man zwei weitere Tabellen (tables, tables_fields) und die sind etwas komplexer, enthalten aber zu jeder tabelle und zu jeder Spalte wichtige Informationen (zB welches Modul sie angehören, welchen Typ sie haben usw) die verwendet werden um die Editoren zu generieren, aber auch um Tabellen und Output zu generieren, und diese können per Editor erweiterte werden.
Sprich wenn man über den Editor ein neus Feld in der Tabelle account einfügt und zB sagt, dass nur admin dieses Feld editieren können.
Ruft ein User den Editor auf sieht er kein Formular-Feld um das Feld zu editieren.
Ein Mod auch nicht.
Ein Admin schon.
Erstellt man ein Feld das Min. Mod braucht sehen Mod und Admin das Feld sobad sie den Editor sehen der User nicht.
Natürlich kann man das noch viel viel Feiner über ein Rechtesystem einstellen, oder eben grob wie es einem gefällt.
Man kann sogar die Sichtbarkeit von machen Felder von dem Inhalt anderer Felder abhängig machen ohne eine Zeile JS zu schreiben, wird alles dynamisch generiert.
Das ganze System ist darauf hinaus, dass man so viel wie Möglich ohne Progger machen kann und das jederzeit Module und Plugins installiert werden können ohne was am Code zu ändern.