CMS - Der Dirigent » Entwicklung » DeDi-Entwicklung

Neue Umfrage | neues Thema | Antworten

Seiten: (2) [1] 2  ( Zum ersten neuen Beitrag )

Plugin Entwicklung > Frage zum Backend

« Älteres Thema | Neueres Thema » Thema abonnieren | Thema versenden | Thema drucken

bratzi
Geschrieben am: 06. Oct 2003 - 13:21


Unregistered








Hallo,

ich versuche mich gerade einen (vorhandenen) Veranstaltungakalender als Plugin umzuschreiben. Die Ausgabe über ein entsprechendes Modul habe ich schon soweit hinbekommen ;-) (stolzbinwieoscar).

Die gesamten Skripts liegen im Verzeichnis backend/plugis/calendar.

Der Kalender hat eine Adminseite die ich nun gerne ins Backend bringen möchte. Habe mal anhand des Newsletter-Plugins versucht die Tabelleneinträge nachzuvollziehen > ... booooo eh ;-).

Kann mir vieleicht jemdand verständlich erklären welche Tabelleneinträge nötig sind und welchen Sinn die haben? Ich möchte eingentlich nur die Seite backend/plugis/calendar/admin/calendar.admin.php ind den Backend-Frame laden. Userrechte usw können gerne später kommen ;-))

Danke ... auch wenn die Beta zur Zeit viel Strass macht ;-)

P.S. Wenn ich den Kalender fertig habe dann stell ich Ihn hier gerne zur Verfügung! Ist keine Eigenentwicklung.
Top
Philipp
Geschrieben am: 06. Oct 2003 - 22:32


Member


Gruppe: Members
Beiträge: 331
Mitgliedsnummer: 23
Mitglied seit: 29. Mar 2003


Hallo!

ok, ich versuche mal alles notwendige zusammen zu bekommen tongue.gif

1. Du musst zuerst dem Adminscript des Kalenders mit einem Link im Backend versehen. Hierzu kannst Du entweder einen komplett neuen Menüpunkt in der obersten Ebene schaffen, oder einfach nur den Link in eine der bereits bestehenden Kategorien (Design, Administration usw.) packen. Die Kategorie sollte für den benutzer dann sichbar werden, wenn er die entsprechenden Rechte hat den neuen, oder einen bereits existierenden Unterpunkt in dieser Kategorie zu wählen. Dazu später mehr...

1.1 Wenn Du einen neuen Menüpunkt hinzufügen willst - nennen wir ihn meinetwegen PlugIns - suchst Du Dir in der Tabelle dedi_beckendmenu die Zeile mit dem kleinsten Wert in der Spalte "idbackendmenu", die in der Spalte "entry_langstring" den Wert empty_dummy enthält. Das sollte ohne installierte PlugIns die idbackendmenu 5 sein.
Diese bearbeitest Du wie folgt:

1.1.1 sortindex auf die gewünschte Position stellen, also 50 um den Punkt ganz rechts anzuzeigen.
1.1.2 langstring eingeben. hier am besten nav_5_0, wenn 5 deine idbackendmenu, ansonsten entsprechend.

1.2 Wenn Du den neuen Menüpunkt einen bereits existierenden Punkt unterordnen willst kannst Du die vorherigen Arbeitschritte überspringen.
Du musst nun den Link erstellen, der das Script als solches aufruft. Dazu erstellst Du in der Tabelle dedi_beckendmenu eine neue Zeile mit folgendem Inhalt.

1.2.1 idbackendmenu --> kannst du wenn Du mit phpMyAdmin arbeitest freilassen, da dieser Wert durch autoincrement automatisch gesetzt wird. Ansonsten einfach den Wert um eins grösser setzen, als den höchsten dieser Spalte.
1.2.2 parent --> gibt den darüberliegenden Strukturpunkt an und wäre im oben beschriebenen Beispiel 5 (nav_5_0), ansonsten einfach schauen, in welchem Menü der Punkt gezeigt werden soll und entsprechend setzen (zb. 3 für "Einstellungen", weil nav_3_0 )
1.2.3 idclient -> Wert ist immer 0, weil 0 sozusagen die client_id des Backends ist (??)
1.2.4 sortindex --> bestimmt die Reihenfolge der Anzeige bei mehreren Menüpunkten, also bei einem neu angelegten Obermenü am besten 10, ansonsten schauen, wo der Punkt erscheinen soll und einen entsprechenden Wert wählen.
1.2.5 entry_langstring --> Hier wird ein Kürzel festgelegt, dem später der Name des Menüpunktes zugeordnet wird. Um im System von DeDi zu bleiben am besten "nav_NummerdesObermenüs_SounsovielterUnterpunkt" eingeben, also im Falle eines neu erstellten Obermenüs nav_5_1.
1.2.6 entry_url --> URL zu der aufzurufenden Seite in der Form main.php?area=plugin&dedi_plugin=verzeichnis_ab_plugins/script.php, wäre in Deinen speziellen Fall main.php?area=plugin&dedi_plugin=calender/dateiname.php
1.2.7 url_target --> hier bin ich mir nicht ganz sicher. Ich glaube wenn es sich bei der aufgerufenen Seite um ein Frameset handelt gehört hier der Wert "frame" rein, ansonsten "single". Wird in Deinem Fall wohl "single" sein.
1.2.8 entry_validate --> hier werden die benötigten Rechte festgelegt, um den Punkt auswählen zu können. Für den Fall, das die nur ein Admin können soll einfach "$perm->is_admin()" einfügen. Wenn Du die Rechte auch einzelnen Gruppen zuordnen können willst, musst Du hier eine neuen Rechtenamen angeben (zb. "$perm->have_perm(bratzi_kalender)") diese Rechte musst du später dann noch definieren und dann kannst Du sie in den Gruppen freischalten...später mehr dazu

So, jetzt folgt ein schneller Wechsel in die Tabelle dedi_values....

Dort musst du zuerst einmal die Namen, die im Menü angezeigt werden sollen definieren. Um das ganze ein wenig abzukürzen hier das fertige INSERT

QUOTE
INSERT INTO `dedi_values` VALUES ('', 0, 0, 'lang', 'nav_5_0', '', '', '', 'PlugIns', 0, NULL, NULL, 'txt', NULL, NULL, 0);


Hier musst Du die Roten Werte entsprechend anpassen. Dies Wäre der Insert für den Menüpunkt in der ersten Ebene. Der für den darunterliegenden sähe netsprechend so aus

QUOTE
INSERT INTO `dedi_values` VALUES ('', 0, 0, 'lang', 'nav_5_1', '', '', '', 'Kalender', 0, NULL, NULL, 'txt', NULL, NULL, 0);


Wenn Du keine neues zu bestimmendes Recht geschaffen hast wars das im Prinzip schon, wenn Du die Anzeige des Menüpunktes an ein den Gruppen zuzuordnendes Recht gekoppelt hast, Dir also im oben stehenden Punkt 1.2.8 einen neuen Rechtenamen ausgedacht hast, musst Du auch diesen noch definieren.

Dazu benötigst Du folgende Inserts:

QUOTE
INSERT INTO `dedi_values` VALUES ('', 0, 0, 'user_perms', 'dedi_access', 'area_plug_pluginname', '', '', 'group_area_plug_pluginname', 0, NULL, NULL, 'txt', NULL, NULL, 0);


Hier wird der Name den Du dem neu definierten Recht gegeben hast festgelegt und der dazugehörige Langstring, der im nächsten Insert festgelegt wird.

QUOTE
INSERT INTO `dedi_values` VALUES ('', 0, 0, 'lang', 'group_area_plug_pluginname', '', '', '', 'Dein Text bei der Zuweisung der Gruppenrechte', 0, NULL, NULL, 'txt', NULL, NULL, 0);


Hier wird also dem Recht nur eine Name gegeben, so dass Du später bei der Zuweisung der Gruppenrechte sehen auswählen kannst.

Jetzt sollte eigentlich alles funktionieren biggrin.gif
Hoffe ich habe das alles einigermaßen brauchbar erklären können - wenn nicht bitte korrigieren - und habe nichts wesentliches vergessen...

Viel Spaß damit

Philipp

--------------------

Top     
kfo
Geschrieben am: 07. Oct 2003 - 00:09


dedi-ritter


Gruppe: Members
Beiträge: 384
Mitgliedsnummer: 200
Mitglied seit: 07. Jul 2003


lecker - vielen dank für die tipps! smile.gif

kann den thread mal jemand pinnen?

mfg
k.

--------------------

::: Wenn jemand fragt: ich bin im Kafenio. :::
Top    
STam
Geschrieben am: 07. Oct 2003 - 01:02


freelancer


Gruppe: Members
Beiträge: 1285
Mitgliedsnummer: 173
Mitglied seit: 03. Jun 2003


Hi,

super Tut smile.gif

zu:QUOTE
1.1 Wenn Du einen neuen Menüpunkt hinzufügen willst - nennen wir ihn meinetwegen PlugIns - suchst Du Dir in der Tabelle dedi_beckendmenu die Zeile mit dem kleinsten Wert in der Spalte "idbackendmenu", die in der Spalte "entry_langstring" den Wert empty_dummy enthält

... glaube ich das die 'empty_dummy' von den Cores mit absicht Reserviert wurden (für eigene Projekte) und also nicht benutzt werden sollten!

zu:QUOTE
1.1.1 sortindex auf die gewünschte Position stellen, also 50 um den Punkt ganz rechts anzuzeigen.

... und Punkt 1.2.4 - der sortindex gilt nur in der entsprechenden Menüebene.

zu:QUOTE
1.2.3 idclient -> Wert ist immer 0, weil 0 sozusagen die client_id des Backends ist (??)

... ist zu sagen das das die Einstellung ist für welche Clients das Menü gilt. Man kann also für verschiedene Clients verschiedene Menüs stricken und auch so en Modul nur in einem Client zur verfügung stellen!

  • 0 = alle Clients
  • x = nur dieser Client

... wobei man, wenn man das Menü für verschiedene Clients konfigurieren will natürlich auch für jeden Client eine neue Zeile (Eintrag) braucht.

Und noch was zu den DeDi-Values

Ich schreib das mal der einfacheren Übersicht halber untereinander wink.gif

INSERT INTO -> Der Mysql Insert-Befehle
`dedi_values` -> in welche Tabelle
VALUES ( -> was wohin...
'', -> AutoId
0, -> für welchen Client gilt diese Definition (so)
0, -> für welche Sprache gilt diese Definition
'perms_backend_general', -> Gruppenname der Definition, hier 'Allgemeine Einstellungen'
'dein_rechte_name', -> der Name des Wertes also eine Variablenbezeichnung, hier sollte man eindeutige Bezeichnungen nach Php setzen
'', -> weitere Wertzuweisungen, aus dem ein Array gebildet wird
'', -> weitere Wertzuweisungen
'', -> weitere Wertzuweisungen
'lang_perm_dein_rechte_name', -> der eigentliche Wert
0, -> ein Sortindex der für die Reihenfolge der Values gilt, zB: im Backend unter Einstellungen
NULL, -> hier der Lang Value für die Übersetzung des Values im Backend unter Einstellungen
NULL, -> hier der Lang Value für die Übersetzung des Gruppennamens im Backend unter Einstellungen
'txt', -> die Angabe über den Typ des Eingabefeldes/Wertes im Backend unter Einstellungen
NULL, -> k/a
NULL, ->k/a
0 -> der mit wichtigste Wert, bestimmt ob dieses Value im Backend unzter Einstellungen sichtbar ist
);


So und nun noch die freudige Mitteilung das die Beta das wohl alles per Klick & Run abfrühstückt rolleyes.gif

Gruss, STam

--------------------

... to watch out for sefrengo.de
Top    
bjoern
Geschrieben am: 07. Oct 2003 - 06:20


Unregistered








so, gepinnt smile.gif

Das mit den empty_dummy Einträgen ist sehr wichtig und hat folgende Bewandnis:

Das Menü ist nach dem "parent"- Prinzip aufgebaut, was so viel heißt, dass jeder Menüpunkt seinen Vorgänger eine Ebene höher kennt. Also der Punkt Module weiß, dass er zu Layout gehört. Dies geschieht über eine Nummer. Jeder Menüeintrag hat seine, eigene, eindeutige Nummer.

Jetzt kommt der Knackpunkt:
Jeder neu eingefügte Menüpunkt kriegt eine neue Nummer per autoincrement von der Datenbank zugewiesen (was soviel bedeutet wie: Es wird auf die höchst verfügbare Nummer in der Datenbank immer eins hinaufaddiert). Dadurch, dass das ein automatischer Prozess ist, kann die Nummer nicht vorrausgesagt werden.

Wenn wir uns jetzt wieder ins Gedächtnis rufen, dass ein Untermenü immer die Nummer des Hauptmenüs wissen muß, haben wir ein Problem. Den dadurch, dass die Nummern automatisch vergeben werden, kann nicht sicher gesagt werden, wer den nur Vorgänger von wem ist (wer für sich selber entwickelt wird da noch keine Probleme bekommen, aber sobald mehrere DEDI- Installationen ins Spiel kommen, knallt es).

Deshalb gibt es die empty_dummys oder anders ausgedrückt die idbackensmenu 1-19. Diese haben feste Zahlen und stellen grundsätzlich immer die Menüebene 0 (Hauptmenü) dar. Zur Zeit (für die Beta) gibt es da folgende feste, sich nicht mehr änderne Einträge:

id | bereich
-------------
01 Redaktion
02 Layout
03 Administration
04 Plugins

Die Nummern 5- 17 sind noch nicht vergeben, allerdings reserviert, benutzt diese bitte nicht. Wir werden die Nummern zuteilen, wenn es neue Hauptpunkte gibt, die nach unserer Auffassung einen eigenen Hauptpunkt verdienen, bzw. wo es sinn macht (z.B. Shop, Dokumentenmanagment, CRM,....).

Die Nummern 18 und 19 sind zur freien Verfügung für eigene Anpassungen. Entwickelt ihr nur für euch, nehmt diese Nummern. Dann seit ihr auch auf der sicheren Seite, wenn ihr neue, offizielle Plugins einbindet.
Top
bratzi
Geschrieben am: 09. Oct 2003 - 21:26


Unregistered








An alle erstmal herzlichst DANKE! Das ist ja ne antwort so umfangreich wie in den ersten DeDi Tagen ;-). Habs leider heute erst geschafft mit dem Kalender weiter zu machen (muss für eppi schreiben ;-)). Ich werde das mal probieren (hoffe ich hab alles verstanden), wollte mich nur kurz darauf melden ;-)
Top
STam
Geschrieben am: 09. Oct 2003 - 23:06


freelancer


Gruppe: Members
Beiträge: 1285
Mitgliedsnummer: 173
Mitglied seit: 03. Jun 2003


Hi,

hier noch ein kleiner zusatz:

Wenn du Rechte für ein Plugin vergibst dann solltest du die Gruppe 'perms_backend_plugin' nutzen.
Dann werden diese 'Plugin-Rechte' auch auf der Seite für Plugin-Rechte angezeigt biggrin.gif

Gruss, STam

--------------------

... to watch out for sefrengo.de
Top    
st-cb
Geschrieben am: 21. Oct 2003 - 10:50


bin wieder da...


Gruppe: Members
Beiträge: 260
Mitgliedsnummer: 245
Mitglied seit: 30. Jul 2003


@ bratzi

bist du mit deinem Veranstaltungakalender schon weiter gekommen?
Top      
Philipp
Geschrieben am: 21. Oct 2003 - 21:58


Member


Gruppe: Members
Beiträge: 331
Mitgliedsnummer: 23
Mitglied seit: 29. Mar 2003


QUOTE
Wenn du Rechte für ein Plugin vergibst dann solltest du die Gruppe 'perms_backend_plugin' nutzen.
Dann werden diese 'Plugin-Rechte' auch auf der Seite für Plugin-Rechte angezeigt


Das es diese Seite für Plugin Rechte gibt hab ich gestern auch festgestellt... unsure.gif
Habe es zuerst auch damit versucht und mich stundenlang gewundert, warum ich die Rechte nirgends vergeben kann...
Naja, wer lesen kann ist klar im Vorteil... tongue.gif

--------------------

Top     
mvsxyz
  Geschrieben am: 17. Jan 2004 - 16:10


Member


Gruppe: Tester
Beiträge: 1503
Mitgliedsnummer: 341
Mitglied seit: 16. Oct 2003


Was für ein Zufall, ich arbeite auch an einem Event-Kalender. biggrin.gif

Meine install.sql sieht so aus:

mehr CODE
#Tabellen dedi_calender, dedi_calender_org erzeugen
CREATE TABLE dedi_calender (
 idevent int(6) NOT NULL auto_increment,
 idclient int(6) NOT NULL default '0',
 deactivated int(1) NOT NULL default '0',
 date int(10) NOT NULL default '0',
 duration int(3) NOT NULL default '0',
 time int(1) NOT NULL default '0',
 description text,
 organizer int(6) NOT NULL default '',
 PRIMARY KEY  (idevent),
 UNIQUE KEY id (idevent),
 KEY idclient (idclient)
) TYPE=MyISAM;

CREATE TABLE dedi_calender_org (
 idorganizer int(6) NOT NULL auto_increment,
 idclient int(6) NOT NULL default '0',
 deactivated int(1) NOT NULL default '0',
 name varchar(255) default NULL,
 street varchar(255) default NULL,
 zip int(5) NOT NULL default '0',
 city varchar(255) default NULL,
 email varchar(255) default NULL,
 internet varchar(255) default NULL,
 special text,
 PRIMARY KEY  (idorganizer)
) TYPE=MyISAM;

# Menüeinträge ins backendmenü hinzufügen
# rootnode id 6 in dedi_backendmenu is reserved for
DELETE FROM dedi_backendmenu WHERE idbackendmenu=18;
INSERT INTO dedi_backendmenu VALUES ('18', 0, 0, 180, 'nav_calender', 'root', 'single', '$perm->have_perm(\'1\', \'area_plugin\')');
INSERT INTO dedi_backendmenu VALUES ('', 18, 0, 10, 'nav_calender_main', 'main.php?area=plugin&dedi_plugin=calender/main.php', 'single', '$perm->have_perm(\'1\', \'plugin\', \'calender\')');
INSERT INTO dedi_backendmenu VALUES ('', 18, 0, 20, 'nav_calender_org', 'main.php?area=plugin&dedi_plugin=calender/main_org.php', 'single', '$perm->have_perm(\'2\', \'plugin\', \'calender\')');

# Pluginrecht definieren key1 = Pluginname, value = Name für Sprachstring
INSERT INTO dedi_values VALUES ('', 0, 0, 'perms_backend_plugin', 'calender', '', '', '', 'calender', '', NULL, NULL, 'txt', NULL, NULL, 0);
INSERT INTO dedi_values VALUES ('', 0, 0, 'lang', 'plugin', 'calender', '0', '', 'Event-Kalender', 0, NULL, NULL, 'txt', NULL, NULL, 0);
INSERT INTO dedi_values VALUES ('', 0, 0, 'lang', 'plugin', 'calender', '1', '', 'Kalender', 0, NULL, NULL, 'txt', NULL, NULL, 0);
INSERT INTO dedi_values VALUES ('', 0, 0, 'lang', 'plugin', 'calender', '2', '', 'Veranstalter', 0, NULL, NULL, 'txt', NULL, NULL, 0);

# Sprachstrings für Navigation
INSERT INTO dedi_values VALUES ('', 0, 0, 'lang', 'nav_calender', '', '', '', 'Event-Kalender', 0, NULL, NULL, 'txt', NULL, NULL, 0);
INSERT INTO dedi_values VALUES ('', 0, 0, 'lang', 'nav_calender_main', '', '', '', 'Kalender', 0, NULL, NULL, 'txt', NULL, NULL, 0);
INSERT INTO dedi_values VALUES ('', 0, 0, 'lang', 'nav_calender_org', '', '', '', 'Veranstalter', 0, NULL, NULL, 'txt', NULL, NULL, 0);


So weit so gut. Das ganze wird auch als neuer Menü-Punkt angezeigt, wenn ich jedoch auf meine Tabelle zugreifen will bekomme ich nur MySQL-Fehlermeldungen.
Hab mal testweise $dedi_db mit

mehr CODE
foreach($dedi_db as $key => $wert) {
 echo $key." => ".$wert."<br>";
}

ausgegeben und ich musste sehen, dass meine neue Tabelle gar nicht angezeigt wird und ich somit auch nicht mit

mehr CODE
$sql = "SELECT * FROM ".$dedi_db['calender']." WHERE idclient='$client' ORDER BY date DESC";
$db->query($sql);

auf meine Tabelle zugreifen. Was mache ich falsch? blink.gif
Ich bin in Sachen MySQL absoluter Newbie und habe noch nie per PHP etwas für/mit einer MySQL-DB programmiert. rolleyes.gif

--------------------

Top   
hk-cons
Geschrieben am: 17. Jan 2004 - 16:36


Dauertester


Gruppe: Tester
Beiträge: 5444
Mitgliedsnummer: 71
Mitglied seit: 31. Mar 2003


Es gibt ne Datei, in der stehen alle DeDi-Tabellen drin ... backend/inc/config.php

--------------------

spart sich sprüche und wird humorlos
Top   
Eppi
Geschrieben am: 18. Jan 2004 - 18:56


.....................noname


Gruppe: Admin
Beiträge: 8077
Mitgliedsnummer: 1
Mitglied seit: 23. Mar 2003


trag aber die tabelle am besten nicht dort ein, sondern schreib den ganzen namen in deinen sql-befehl.

--------------------

"Heute ist nicht aller Tage... ich komm wieder, keine Frage!"
Top   
mvsxyz
Geschrieben am: 18. Jan 2004 - 19:41


Member


Gruppe: Tester
Beiträge: 1503
Mitgliedsnummer: 341
Mitglied seit: 16. Oct 2003


Wo finde ich den?/Wie mach ich das?
So hats ja schließlcih auch funktioniert... smile.gif

--------------------

Top   
Eppi
Geschrieben am: 18. Jan 2004 - 19:44


.....................noname


Gruppe: Admin
Beiträge: 8077
Mitgliedsnummer: 1
Mitglied seit: 23. Mar 2003


wo findest du wen? schreib doch erstmal einfach "hallo" in die datei. eine php-datei kann doch auch aus normalem html bestehen.

--------------------

"Heute ist nicht aller Tage... ich komm wieder, keine Frage!"
Top   
mvsxyz
Geschrieben am: 18. Jan 2004 - 20:42


Member


Gruppe: Tester
Beiträge: 1503
Mitgliedsnummer: 341
Mitglied seit: 16. Oct 2003


Jetzt ist die Verwirrung komplett. blink.gif Also nochmal ganz von vorne:
hkcons hat mir geraten meine neuangelegten Tabellen unter backend/inc/config.php zu registrieren, damit ich sie z.B. über $dedi_db['calender'] auslesen kann. Das funktioniert auch ganz wunderbar. Ich kann neue Termine anlegen, löschen, usw.
Nun hast du aber gesagt ich solle die Tabellen am besten nicht dort eintragen, sondern einen ganzen Namen in meinen SQL-Befehl eintragen.

Nun meine Frage: Was meinst du mit Namen in meinen SQL-Befehl eintragen? Welchen Namen in welchen SQL-Befehl? rolleyes.gif

Das letzte ist mir schon klar. In meiner Plugin-Datei (main.php) steht ja auch PHP- mit HTML-Code gemischt drin. biggrin.gif

--------------------

Top   

Thema wird von 0 Benutzer gelesen (0 Gäste und 0 Anonyme Benutzer)
0 Mitglieder:

23 Antworten seit 06. Oct 2003 - 13:21

Thema abonnieren | Thema versenden | Thema drucken


Seiten: (2) [1] 2 

<< Zurück zu DeDi-Entwicklung

Neue Umfrage | neues Thema

Home | Das Projekt | Download | Entwicklung | Dokumentation | Forum | Impressum