Frage: eigene Tabellen integrieren

Gesperrt
slueggi
Beiträge: 5
Registriert: Fr 17. Dez 2010, 10:05
Kontaktdaten:

Frage: eigene Tabellen integrieren

Beitrag von slueggi »

Hallo,

Ich bin absoluter Contenido Neuling. Daher eine wahrscheinlich eher grundlegende Frage auf die ich trotzdem dummerweise bisher weder im Handbuch noch im Forum irgendwelche Hinweise finden konnte.
Ich habe für eine Formularabfrage (übers Frontend) eine eigene Tabelle von Hand mittels phpmyadmin erstellt. Leider kann ich diese Tabelle nicht in einer eigenen class-datei nach dem Schema der Variable $cfg abfragen...
Kurzes Beispiel:
//Konstruktor
function MyClassname(){
global $cfg;
$this->cfg = $cfg;
$this->table = $this->cfg["tab"]["mytable"];
$this->db = new DB_Contenido;
}

//Tabelle nutzen
function setEntry($_A, $_B) {
$sql = "INSERT INTO ". $this->table.".......undsoweiter

if($this->db->query($sql)){
return true;
}else return false;
}

Wenn ich ich im Konstrukter "mytable" durch Eine vom Contenido-System ersetze steht diese ordentlich in $this->table drinne.
Ich kann natürlich direkt auf mytable zugreifen mit INSERT INTO con_mytable aber das ist ja nicht Sinn der Sache.
Zeigt mir allerdings, dass meine Tabelle in Ordnung ist, da ich Einträge machen kann und generell auch die Benutzung der Variablen, da ich auf andere Tabellen so zugreifen kann.
Ich habe gesehen, dass in der Tabelle con_sequence ale Tabellen des Systems abgelegt sind, ein Hinzufügen meiner Tabelle brachte aber leider auch nicht das gewünschte Ergebnis.
Im Backend habe ich auch keine Möglichkeit gesehen Tabellen irgendwie "bekannt" zu machen

Was also muss ich beachten beim Anlegen eigener Tabellen um auf diese vernünftig zugreifen zu können?

Danke für Eure Hilfe!
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Frage: eigene Tabellen integrieren

Beitrag von Oldperl »

Hallo slueggi,

erst einmal willkommen im Contenido Forum. :-)

Du musst deine Tabelle auch noch ins Array $cfg['tab'] von Contenido eintragen wenn du darauf, so wie du es beschrieben hast, zugreifen willst.
Das machst du in diesem Falle am Besten über eine config.local.php im contenido/includes Verzeichnis, dann wird es bei einem Update auch nicht überschrieben..
Wie der Eintrag dort aussehen muss kannst du in der cfg_sql.inc.php im gleichen Verzeichnis sehen.

Gruß aus Franken

Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
slueggi
Beiträge: 5
Registriert: Fr 17. Dez 2010, 10:05
Kontaktdaten:

Re: Frage: eigene Tabellen integrieren

Beitrag von slueggi »

WOW! Danke Ortwin. Schnelle Antwort und funktioniert einwandfrei.
Eine Frage noch dazu: Ich hab dann das incuding für die config.local.php in der /includes/start.php reingepackt in der Annahme dass diese Datei bei einem Update prinzipell nicht berührt wird. Ist das richtig?

Ich hätte noch eine andere Frage, passt zwar nicht zum Thema,aber wo ich dich grad an der "Angel" hab ;)
Wenn ich das richtig verstanden hab benutzt Contenido die smarty engine!?
Wenn ich jetzt z.B. den Inhalt einer "Systemtabelle" in eine Selectbox schreiben will bin ich das bisher so gewohnt:
ich übergebe das Array aus der PHP-Datei an das Template weiter. Bei Contenido müsste das dann so gehen:

$tpl->set("s", "tab_sys_grade", $tab_sys_grade);
Das Array sieht im Prinzip so aus
Array
(
[1] => A
[2] => B
[3] => C
)
und kann dann mittels einer foreach-schleife das array durchlaufen:
<select name="test" id="test">
<option value="0">Bitte w&auml;hlen</option>
{foreach from=$tab_sys_grade item=sysval key=id}
<option value="{$id}">{$sysval}</option>
{/foreach}
</select>

...leider funktioniert das in Contenido so nicht....

Ich hab z.B. in der Navigation gesehen, dass das Prinzip einer Schleife etwa so aussehen müsste:
<!-- BEGIN:BLOCK -->
...
<!-- END:BLOCK -->

allerdings hole ich mir die Variablen ja nicht aus dem Backend sondern hab ein eigenes Array....
ein Test auf Doof in dieser Richtung, blieb dann daher auch erfolglos:
<select name="test2" id="test2">
<option value="0">Bitte w&auml;hlen</option>
<!-- BEGIN:BLOCK -->
<option value="{$tab_sys_grade[sys_id]}">{$tab_sys_grade[sys_value]}</option>
<!-- END:BLOCK -->
</select>

selbst mit {$tab_sys_grade[1]} erhalte ich nicht den Wert A zurück...

Hast du da vielleicht noch einen Tipp für mich?

Danke und Gruß slueggi
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Frage: eigene Tabellen integrieren

Beitrag von Oldperl »

slueggi hat geschrieben:Ich hab dann das incuding für die config.local.php in der /includes/start.php reingepackt in der Annahme dass diese Datei bei einem Update prinzipell nicht berührt wird. Ist das richtig?
Was hast du wo "reingepackt? :shock:
Du brauchst nur eine config.local.php im contenido/includes Verzeichnis anlegen, sonst nichts, alles andere kann Contenido schon selbst.
slueggi hat geschrieben:Wenn ich das richtig verstanden hab benutzt Contenido die smarty engine!?
Wo hast du das denn her? :roll:
Contenido hat eine eigene einfache Template-Klasse. Smarty kommt im Contenido Core nicht zum Einsatz. Das müßtest du dann schon selbst integrieren.
Eine Entwicklerdoku zur Klasse gibt es in der API-Doc :arrow: http://www.conrepo.org/apidoc/contenido ... 8.11/html/ oder im Wiki :arrow: http://www.contenido-wiki.org/wiki/inde ... ate-Klasse

Gruß aus Franken

Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
slueggi
Beiträge: 5
Registriert: Fr 17. Dez 2010, 10:05
Kontaktdaten:

Re: Frage: eigene Tabellen integrieren

Beitrag von slueggi »

Oldperl hat geschrieben:Du brauchst nur eine config.local.php im contenido/includes Verzeichnis anlegen, sonst nichts, alles andere kann Contenido schon selbst.
Das ist ja super! Wär ich jetzt nichtdraufgekomen, da in der start.php ja auch andere wichtige Dateien includiert werden unter anderem auch die cfg_sql.inc.php. Naja, wie gesagt bin noch ganz frisch am ausprobieren. So nach und nach füllen sich aber schon so einige Verständnislücken.
Oldperl hat geschrieben:Contenido hat eine eigene einfache Template-Klasse
Hmmm, OK das mit dem Smarty hab ich dann wohl irgendwie in den falschen Hals gekriegt. Schade eigentlich, es wäre so schön einfach. Gut jedenfalls hab ich das jetzt auch mit dem
<!-- BEGIN:BLOCK --> kapiert. Auch schade eigentlich. ;)

ich habe das/mein Problem erstmal umgangen mit:
foreach($tab_sys_grade as $key=>$value ){
$sel_grade .= "<option value=$key>$value</option>";
}
$tpl->set("s", "grade_options", $sel_grade);

im Output und in der template Datei habe ich dann quasi den String eingesetzt
<select name="test" id="test">
<option value="0">Bitte w&auml;hlen</option>
{grade_options}
</select>


funktioniert, ist dynamisch bzw. über "systemtabellen" beliebig erweiterbar ohne an den Code zu müssen. Aber gefällt mir natürlich nicht so, weil unsauber.
Ich hab gesehen, es gibt also auch Klassen wie "cHTMLSelectElement", wahrscheinlich ist das der richtige Weg z.B.Formulare zu bauen. Das sieht auf den ersten Blick aber erstmal ein bisschen umständlich aus, bzw. wird wohl eine Weile dauern bis ich das vernünftig benutzen kann.

Es sei denn jemand hat noch ein Tip wie man ein Array in der Templatedatei durchlaufen kann???

Danke und Sorry für blöde Fragen ;(
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Frage: eigene Tabellen integrieren

Beitrag von Oldperl »

slueggi hat geschrieben:Gut jedenfalls hab ich das jetzt auch mit dem
<!-- BEGIN:BLOCK --> kapiert. Auch schade eigentlich. ;)
Sicher?

im Modul...

Code: Alles auswählen

foreach($tab_sys_grade as $key=>$value ){
    $tpl->set("d", "grade_options", "<option value=\"$key\">$value</option>");
    $tpl->next();
}
im Template

Code: Alles auswählen

<select name="test" id="test">
<option value="0">Bitte w&auml;hlen</option>
<!-- BEGIN:BLOCK -->
{grade_options}
<!-- END:BLOCK -->
</select>
Gruß aus Franken

Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
slueggi
Beiträge: 5
Registriert: Fr 17. Dez 2010, 10:05
Kontaktdaten:

Re: Frage: eigene Tabellen integrieren

Beitrag von slueggi »

Hallo Ortwin,

vielen Dank für deine Geduld und deine Lösung. ;)
Exakt so hatte ich es anfänglich auch probiert hatte aber permanent eine Fehlermeldung. Wird irgend ein dummer Tippfehler gewesen sein, den ich nicht erkennen konnte.
Daher hatte ich mir fix eine andere Lösung überlegt. Aber ich bin froh, dass es doch anders funktioniert und ich die Lösung sogar schon in der Hand hatte. Gefällt mir viel besser so!

Vielen Dank und viele Grüße
slueggi
slueggi
Beiträge: 5
Registriert: Fr 17. Dez 2010, 10:05
Kontaktdaten:

Re: Frage: eigene Tabellen integrieren

Beitrag von slueggi »

Kurze Frage noch hinterher. Wie kann ich das mehrmals anwenden? Ich möchte natürlich mehrere Selectboxen befüllen, nicht nur eine pro Template.
Gibt es eine Lösung ohne die Templateklasse anzufassen?
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Frage: eigene Tabellen integrieren

Beitrag von Oldperl »

Hallo slueggi,

indem du Templates ineinander verschachtelst.

Nutzt du beim Generieren deines Select-Templates den 2. Parameter $return der Funktion function generate($template, $return = 0, $note = 0) und setzt diesen auf true, so kannst du das generierte Template in einer Variablen speichern und diese dann in ein 2. Template einbauen.
Um dafür nur mit einem Tpl-Objekt zu arbeiten solltest du erst alle Select-Felder als Template generieren und in Variablen speichern, um dann dein Haupttemplate zu befüllen und zu generieren. Hilfreich ist hierbei auch die Funktion $tpl->reset(), die das Templateobjekt zurücksetzt.

Gruß aus Franken

Ortwin

Quelle: http://www.conrepo.org/apidoc/contenido ... 8.11/html/
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
Gesperrt