Konfiguration
Konfiguration
ich habe einen entwicklungsvorschlag als erweiterung publiziert. siehe hier:
http://www.contenido.org/forum/viewtopic.php?t=9644
http://www.contenido.org/forum/viewtopic.php?t=9644
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
noch etwas bevor ich es vergesse...
beim artikel kopieren wird da die konfiguration mitkopiert ?
anderer punkt
da das ganze ja auf vererbung beruht(lt. letztem posting) und es möglich ist im output bereich werte in der konfiguration zu ändern...
was passiert wenn eine aktualisierung versucht wird und die konfiguration wurde bei der kategorie vorgenommen ?
wird die kategorie konfiguration dann upgedatet ? (ähm und ist das gewünscht)
beim artikel kopieren wird da die konfiguration mitkopiert ?
anderer punkt
da das ganze ja auf vererbung beruht(lt. letztem posting) und es möglich ist im output bereich werte in der konfiguration zu ändern...
was passiert wenn eine aktualisierung versucht wird und die konfiguration wurde bei der kategorie vorgenommen ?
wird die kategorie konfiguration dann upgedatet ? (ähm und ist das gewünscht)
*** make your own tools (wishlist :: thx)
zuerst einmal: beim kopieren von artikeln wird die konfiguration nicht übernommen. das wird erst funktionieren, wenn die entsprechenden anpassungen im kopierscript erfolgt sind. und das wäre nach meiner einschätzung der fall, sobald eine integration erfolgt ist. das gleiche gilt für die migration eines artikels in eine andere sprache. schlimmstenfalls könnte ich das noch in die klasse einfügen. allerdings gehört es nach meiner meinung eben nicht dorthin, sondern in das kopier-, respektive das migrationsscript. also erst nach erfolgter integration. aber das könnte ich schon noch lösen, falls es keine integration geben wird.
das andere: die speicherung von werten aus dem moduloutput in die konfiguration erfolgt immer im artikel. wenn dort keine konfiguration vorliegt, wird eine erzeugt aufgrund der aktuell in verwendung stehender daten und dem neu hinzugefügten wert. das verhalten ist in diesem fall so, wie bisher. nur wenn keine konfiguration erfolgt, ist das verhalten neu so, dass stets die aktuelle konfiguration aus der kategorie, respektive dem template übernommen wird.
das andere: die speicherung von werten aus dem moduloutput in die konfiguration erfolgt immer im artikel. wenn dort keine konfiguration vorliegt, wird eine erzeugt aufgrund der aktuell in verwendung stehender daten und dem neu hinzugefügten wert. das verhalten ist in diesem fall so, wie bisher. nur wenn keine konfiguration erfolgt, ist das verhalten neu so, dass stets die aktuelle konfiguration aus der kategorie, respektive dem template übernommen wird.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
ähm zum ersten punkt
ich glaube schon das es in die klasse gehört...
eine methode um die konfiguration zu kopieren und eine um sie zu löschen(wird vermutlich auch benötigt)
bei einer integration würde man dann auf die methoden der klasse zurückgreifen...
die integration würde dann vermutlich nur aus jeweils einer zeile bestehen... und zwar beim artikel kopieren und beim löschen...
zum zweiten
alles klar
ich glaube schon das es in die klasse gehört...
eine methode um die konfiguration zu kopieren und eine um sie zu löschen(wird vermutlich auch benötigt)
bei einer integration würde man dann auf die methoden der klasse zurückgreifen...
die integration würde dann vermutlich nur aus jeweils einer zeile bestehen... und zwar beim artikel kopieren und beim löschen...
zum zweiten
alles klar
*** make your own tools (wishlist :: thx)
so gesehen bin ich mit dir einverstanden. ich bau das also in die klasse ein. aber funktionieren - ich verstehe das doch richtig - wird es erst nach der integration. der aufruf der kopiermethode würde also über das kopierscript erfolgen, nicht?
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
und zur löschung: ich werd einbauen, dass nicht verwendete konfigurationen immer wieder gelöscht werden. darum kann sich die klasse ohne weiteres kümmern. kein problem.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
richtig, der aufruf würde dann natürlich aus dem kopierscript erfolgen müssen...kummer hat geschrieben:so gesehen bin ich mit dir einverstanden. ich bau das also in die klasse ein. aber funktionieren - ich verstehe das doch richtig - wird es erst nach der integration. der aufruf der kopiermethode würde also über das kopierscript erfolgen, nicht?
beim kopieren würd ich sagen functions.con.php -> in conCopyArtLang
dazuhängen...
bei conSyncArticle dito bzw... bei functions.tpl.php -> in tplcfgDuplicate
falls du ne eigene lösch methode reinbaust -> in conDeleteart verankern...
das sollte an sich die komplette integration sein...
man könnte dann natürlich so weit gehen und die cInclude in der functions.api.php zu verankern... dann spart man sich das mit cInclude im modul bereich...
soviel zur theorie...
*** make your own tools (wishlist :: thx)
ok, neu hinzu gekommen sind folgende methoden:
setDefaultValue -> damit kann für jeden wert ein default-wert gesetzt werden. dieser wird nur übernommen, wenn in der vorliegenden konfiguration nicht schon ein wert gesetzt ist.
deleteConfiguration -> zur löschung einer konfiguration
duplicateConfiguration -> zur erstellung eines konfigurations-duplikates (andere sprache oder andere idart)
ausserdem ist jetzt das sql-präfix berücksichtigt (wie von herrB gewünscht).
hier der neue code:
setDefaultValue -> damit kann für jeden wert ein default-wert gesetzt werden. dieser wird nur übernommen, wenn in der vorliegenden konfiguration nicht schon ein wert gesetzt ist.
deleteConfiguration -> zur löschung einer konfiguration
duplicateConfiguration -> zur erstellung eines konfigurations-duplikates (andere sprache oder andere idart)
ausserdem ist jetzt das sql-präfix berücksichtigt (wie von herrB gewünscht).
hier der neue code:
Code: Alles auswählen
<?php
/**
* $Revision: 1.12 $
* $Source: D:/cvs/cvsrepo/test/CONTENIDO_MODULE/wdreiConf/wdreiConf.class.inc.php,v $
* $Date: 2005/10/10 11:29:53 $
*/
/**
* wdreiConf - Klasse zur vereinfachten Konfiguration in Contenido
* @author Andreas Kummer
* @copyright Copyright © 2005, mumprecht & kummer w3concepts
*/
class wdreiConf {
/**
* Konstruktor der Klasse
*/
function wdreiConf() {
global $idart, $lang, $cnumber, $cCurrentContainer, $idtpl, $idcat, $cfg;
$this->tblName = $cfg['sql']['sqlprefix']."_wdreiConf";
/*
* Globale Variablen in den Kontext der Klasse aufnehmen
*/
$this->idart = (empty($idart))?(0):($idart);
$this->lang = (empty($lang))?(0):($lang);
$this->cnumber = (empty($cnumber))?(0):($cnumber);
$this->cCurrentContainer = (empty($cCurrentContainer))?(0):($cCurrentContainer);
$this->idtpl = (empty($idtpl))?(0):($idtpl);
$this->idcat = (empty($idcat))?(0):($idcat);
/*
* Ermitteln der Konfigurationsstufe (Template, Kategorie, Artikel)
*/
$this->getConfigurationLevel();
/*
* Contenido-Datenbank im Klassenkontext initialisieren
*/
$this->db = new DB_Contenido();
/*
* Tabelle anlegen, falls diese noch nicht existieren sollte
*/
$this->createTable();
/*
* Daten speichern, falls eine Übertragung erfolgt ist
*/
$this->saveData();
/*
* Zurück holen der Daten
*/
$this->restoreValues();
}
/**
* Speicherung der übergebenen Konfigurationsdaten.
* @param Struct Zu serialisierende und zu speichernde Werte
* @return Boolean Die Funktion gibt in jedem Fall TRUE zurück
*/
function saveSerial($value) {
/*
* Serial erstellen
*/
$content = $this->createSerial($value);
/*
* Ermitteln, ob bereits ein Serial in der Datenbank vorhanden ist.
*/
$this->db->query("SELECT * FROM {$this->tblName} WHERE idlang = {$this->lang} AND cnumber = {$this->cnumber} AND idtpl = {$this->idtpl} AND idcat = {$this->idcat} AND idart = {$this->idart}");
if ($this->db->next_record()) {
/*
* Serial ist bereits vorhanden; Update wird ausgeführt
*/
$this->db->query("UPDATE {$this->tblName} SET content = '{$content}' WHERE idlang = {$this->lang} AND cnumber = {$this->cnumber} AND idtpl = {$this->idtpl} AND idcat = {$this->idcat} AND idart = {$this->idart}");
return true;
}
/*
* Serial ist noch nicht vorhanden; Insert wird ausgeführt
*/
$this->db->query("INSERT INTO {$this->tblName} (content, idart, idlang, idtpl, idcat, cnumber) VALUES('{$content}', {$this->idart}, {$this->lang}, {$this->idtpl}, {$this->idcat}, {$this->cnumber})");
return true;
}
/**
* Erstellt den zur Speicherung notwendigen WDDX-Serial.
* @param Struct Zu serialisierende Werte
* @return String WDDX-Paket (XML) mit der Struktur sowie den Werten
*/
function createSerial($value) {
return mysql_real_escape_string(wddx_serialize_value($value));
}
/**
* Prüft, ob sich eine Tabelle mit der Bezeichnung con_wdreConf bereits in
* der Datenbank befindet oder nicht. Falls die Tabelle nicht existiert,
* wird sie in der aktuellen Datenbank angelegt werden.
* @return Boolean Die Funktion gibt in jedem Fall TRUE zurück
*/
function createTable() {
$this->db->query("SHOW TABLES LIKE '{$this->tblName}'");
if ($this->db->next_record()) {
/*
* Tabelle existiert bereits
*/
return true;
}
/*
* Tabelle existiert noch nicht und muss angelegt werden
*/
$this->db->query("CREATE TABLE {$this->tblName} (pk_wdreiConf int(10) unsigned NOT NULL auto_increment, cnumber int(11) NOT NULL default '0', idart int(11) NOT NULL default '0', idlang int(11) NOT NULL default '0', idtpl int(10) unsigned NOT NULL default '0', idcat int(10) unsigned NOT NULL default '0', content text NOT NULL, PRIMARY KEY (pk_wdreiConf)) TYPE=MyISAM");
return true;
}
/**
* Gibt die HTML-formatierte Konfigurationsmaske zurück.
*/
function showConfiguration() {
$returnValue = '<table width="100%" cellpadding="3" cellspacing="0" border="0">';
$returnValue .= '<tr><td width="35%" class="text_medium"></td><td class="text_medium"></td></tr>';
if (!empty($this->field)) {
foreach ($this->field as $field) {
$returnValue .= '<tr><td valign="top" width="35%" class="text_medium">'.$field[0].'</td><td valign="top" class="text_medium">'.$field[1].'</td></tr>';
}
}
$returnValue .= '</table>';
echo $returnValue;
}
/**
* Erzeugt in Textfeld.
* @param String Feldbezeichner (Anzeige links)
* @param String Feldname
* @param Array Assoziatives Array mit dem Attributbezeichner als Schlüssel
* und dem Attributwert als Wert
*/
function makeText($label, $name, $attributes = null) {
if (empty($attributes['size'])) {
$attributes['size'] = 40;
}
$returnValue = '<input type="text" name="'.$this->cnumber.'_'.$name.'" ';
$returnValue .= $this->addAttributes($attributes);
$returnValue .= 'value="'.$this->getValue($name).'" />';
$this->field[] = array($label, $returnValue);
}
/**
* Erzeugt eine Textarea.
* @param String Feldbezeichner (Anzeige links)
* @param String Feldname
* @param Array Assoziatives Array mit dem Attributbezeichner als Schlüssel
* und dem Attributwert als Wert
*/
function makeTextarea($label, $name, $attributes = null) {
if (empty($attributes['rows'])) {
$attributes['rows'] = 6;
}
if (empty($attributes['cols'])) {
$attributes['cols'] = 40;
}
$returnValue = '<textarea name="'.$this->cnumber.'_'.$name.'" ';
$returnValue .= $this->addAttributes($attributes);
$returnValue .= '>'.$this->getValue($name).'</textarea>';
$this->field[] = array($label, $returnValue);
}
/**
* Erzeugt ein Select-Feld.
* @param String Feldbezeichner (Anzeige links)
* @param String Feldname
* @param Array Assoziatives Array mit dem Werte-Schlüssel-Paaren. Der
* Schlüssel wird angezeigt, der Wert dient als Übergabewert
* @param Array Assoziatives Array mit dem Attributbezeichner als Schlüssel
* und dem Attributwert als Wert
* @param Boolean Bestimmt, ob das Selectfeld eine Mehrfachauswahl erlaubt
* oder nicht
*/
function makeSelect($label, $name, $valuePairs, $attributes = null, $multiple = false) {
if (empty($attributes['size'])) {
if ($multiple) {
$attributes['size'] = 5;
$attributes['multiple'] = 'multiple';
} else {
$attributes['size'] = 1;
}
}
if ($multiple) {
$returnValue = '<select name="'.$this->cnumber.'_'.$name.'[]" ';
} else {
$returnValue = '<select name="'.$this->cnumber.'_'.$name.'" ';
}
$returnValue .= $this->addAttributes($attributes);
$returnValue .= '>';
if (!empty($valuePairs)) {
foreach ($valuePairs as $key => $value) {
if ($multiple) {
if (in_array($value, $this->getValue($name))) {
$returnValue .= '<option value="'.$value.'" selected="selected">'.$key.'</option>';
} else {
$returnValue .= '<option value="'.$value.'">'.$key.'</option>';
}
} else {
if ($this->getValue($name) == $value) {
$returnValue .= '<option value="'.$value.'" selected="selected">'.$key.'</option>';
} else {
$returnValue .= '<option value="'.$value.'">'.$key.'</option>';
}
}
}
}
$returnValue .= '</select>';
$this->field[] = array($label, $returnValue);
}
/**
* Erzeugt Radio-Buttons.
* @param String Feldbezeichner (Anzeige links)
* @param String Feldname
* @param Array Assoziatives Array mit dem Werte-Schlüssel-Paaren. Der
* Schlüssel wird angezeigt, der Wert dient als Übergabewert
* @param Array Assoziatives Array mit dem Attributbezeichner als Schlüssel
* und dem Attributwert als Wert
*/
function makeRadio($label, $name, $valuePairs, $attributes = null) {
$returnValue = '';
if (!empty($valuePairs)) {
foreach ($valuePairs as $key => $value) {
if ($this->getValue($name) == $value) {
$returnValue .= '<div><input type="radio" name="'.$this->cnumber.'_'.$name.'" value="'.$value.'" checked="checked"> '.$key.'</div>';
} else {
$returnValue .= '<div><input type="radio" name="'.$this->cnumber.'_'.$name.'" value="'.$value.'"> '.$key.'</div>';
}
}
}
$this->field[] = array($label, $returnValue);
}
/**
* Erzeugt Checkboxen.
* @param String Feldbezeichner (Anzeige links)
* @param String Feldname
* @param Array Assoziatives Array mit dem Werte-Schlüssel-Paaren. Der
* Schlüssel wird angezeigt, der Wert dient als Übergabewert
* @param Array Assoziatives Array mit dem Attributbezeichner als Schlüssel
* und dem Attributwert als Wert
*/
function makeCheckbox($label, $name, $valuePairs, $attributes = null) {
$returnValue = '';
if (!empty($valuePairs)) {
foreach ($valuePairs as $key => $value) {
if (in_array($value, $this->getValue($name))) {
$returnValue .= '<div><input type="checkbox" name="'.$this->cnumber.'_'.$name.'[]" value="'.$value.'" checked="checked"> '.$key.'</div>';
} else {
$returnValue .= '<div><input type="checkbox" name="'.$this->cnumber.'_'.$name.'[]" value="'.$value.'"> '.$key.'</div>';
}
}
}
$this->field[] = array($label, $returnValue);
}
/**
* Fügt die Attribute zu einem String zusammen und gibt diesen zurück
* @param Array Assoziatives Array mit dem Attributbezeichner als Schlüssel
* und dem Attributwert als Wert
* @return String Attributte als String
*/
function addAttributes($attributes) {
$returnValue = '';
if (!empty($attributes)) {
foreach ($attributes as $key => $value) {
$returnValue .= $key.'="'.$value.'" ';
}
}
return $returnValue;
}
/**
* Ermittelt die Konfigurationsstufe (2 = Artikel, 1 = Kategorie, 0 =
* Template) und speichert diese als Klassenattribut
*/
function getConfigurationLevel() {
$this->configLevel = 2;
if ($this->idart != 0) return;
$this->configLevel--;
if ($this->idcat != 0) return;
$this->configLevel--;
}
/**
* Holt die Daten aus der Datenbank und deserialisiert diese in das
* Klassenattribut confValues
*/
function restoreValues() {
$cnumber = $this->cnumber;
if ($cnumber == 0) {
$cnumber = $this->cCurrentContainer;
}
$this->db->query("SELECT * FROM {$this->tblName} WHERE idlang = {$this->lang} AND cnumber = {$cnumber} AND idtpl = {$this->idtpl} AND idcat = {$this->idcat} AND idart = {$this->idart}");
if (!$this->db->next_record()) {
$this->db->query("SELECT * FROM {$this->tblName} WHERE idlang = {$this->lang} AND cnumber = {$cnumber} AND idtpl = {$this->idtpl} AND idcat = {$this->idcat}");
if (!$this->db->next_record()) {
$this->db->query("SELECT * FROM {$this->tblName} WHERE idlang = {$this->lang} AND cnumber = {$cnumber} AND idtpl = {$this->idtpl}");
if (!$this->db->next_record()) {
$this->confValues = array();
return;
}
}
}
$this->confValues = wddx_deserialize($this->db->f('content'));
}
/**
* Gibt den Wert mit der Bezeichnung $name aus dem Klassenattribut
* confValues zurück.
*/
function getValue($name) {
$cnumber = $this->cnumber;
if ($cnumber == 0) {
$cnumber = $this->cCurrentContainer;
}
if (!isset($this->confValues[$cnumber.'_'.$name])) {
return null;
} else {
return $this->confValues[$cnumber.'_'.$name];
}
}
/**
* Setzt den Wert mit der Bezeichnung $name im Klassenattribut confValues.
* @param String Variablenbezeichner
* @param Mixed Objekt, das gesetzt werden soll
*/
function setValue($name, $value) {
$cnumber = $this->cnumber;
if ($cnumber == 0) {
$cnumber = $this->cCurrentContainer;
}
$this->confValues[$cnumber.'_'.$name] = $value;
}
/**
* Setzt den Wert mit der Bezeichnung $name im Klassenattribut confValues
* unter der Bedingung, dass diese nicht bereits einen Wert zugewiesen hat.
* @param String Variablenbezeichner
* @param Mixed Objekt, das gesetzt werden soll
*/
function setDefaultValue($name, $value) {
$cnumber = $this->cnumber;
if ($cnumber == 0) {
$cnumber = $this->cCurrentContainer;
}
if ($this->getValue($name) == null) {
$this->confValues[$cnumber.'_'.$name] = $value;
}
}
/**
* Speichert die übertragenen Daten aus dem Formularversand, falls ein
* solcher vorgenommen worden ist.
*/
function saveData() {
if (empty($_POST)) {
return true;
}
if ($this->cnumber == 0) {
return true;
}
$saveValue = array();
foreach ($_POST as $key => $value) {
if ($this->beginsWith($key, $this->cnumber.'_')) {
$saveValue[$key] = $value;
}
}
$this->saveSerial($saveValue);
}
/**
* Speichert die serialisierten Daten nach Aktualisierung durch das Modul.
*/
function actualizeData() {
$cnumber = $this->cnumber;
if ($cnumber == 0) {
$cnumber = $this->cCurrentContainer;
}
if ($cnumber == 0) {
return;
}
$this->saveSerial($this->confValues);
}
/**
* Prüft, ob str mit sub beginnt.
* @param string str Quellstring.
* @param string sub Überprüfstring.
* @return boolean True bei Übereinstimmung. Sonst false.
*/
function beginsWith($str, $sub) {
return (substr($str, 0, strlen($sub)) == $sub);
}
/**
* Statische Funktion zur Löschung einer Konfiguration
* @param Integer Primärschlüssel der Sprache
* @param Integer Primärschlüssel des Templates
* @param Integer Primärschlüssel der Kategorie
* @param Integer Primärschlüssel des Artikels
*/
function deleteConfiguration($idlang, $idtpl, $icat = 0, $idtpl = 0) {
$this->db->query("DELETE FROM {$this->tblName} WHERE idlang = {$idlang} AND idtpl = {$idtpl} AND idcat = {$idcat} AND idart = {$idart}");
}
/**
* Dupliziert eine Konfiguration
* @param Integer Primärschlüssel der Sprache der Quellkonfiguration
* @param Integer Primärschlüssel des Artikels der Quellkonfiguration
* @param Integer Primärschlüssel der Sprache der Zielkonfiguration
* @param Integer Primärschlüssel des Artikels der Zielkonfiguration
*/
function duplicateConfiguration($srcIdLang, $srcIdArt, $desIdLang, $desIdArt) {
$this->db->query("SELECT * FROM {$this->tblName} WHERE idlang = {$srcIdLang} AND idart = {$srcIdArt}");
while ($this->db->next_record()) {
$idtpl = $this->db->f('idtpl');
$idcat = $this->db->f('idcat');
$cnumber = $this->db->f('cnumber');
$content = $this->db->f('content');
$this->db->query("INSERT INTO {$this->tblName} (content, idart, idlang, idtpl, idcat, cnumber) VALUES('{$content}', {$desIdArt}, {$desIdLang}, {$idtpl}, {$idcat}, {$cnumber})");
}
}
}
?>
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
ist schon jemand dazu gekommen, das bei sich auszuprobieren?
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
nicht, dass es eilen würde. aber wenn das ganze funktionieren sollte, würde ich in zukunft bei eigenen modul darauf abstützen. aber dazu muss es natürlich einwandfrei funktionieren.
danke im voraus!
danke im voraus!
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
hi folks
ich werde mich für die nächsten 5 bis 6 monate um relativ grosse projekte kümmern müssen und kann mich leider um dieses projekt nicht mehr gross weiter verfolgen (mindestens im moment nicht).
ich bin der meinung, dass der gewählte ansatz für die speicherung der konfiguration die bestehenden probleme lösen kann, ohne dass grosse eingriffe in den kern von contenido nötig sind.
wie gesagt werde ich mich leider in den nächsten monaten nicht darum kümmern können. im prinzip ist es ja fertig: ein paar kontrollen und die eine oder andere anpassung werden wohl noch nötig sein.
wäre schön, wenn das jemand aus der community übernehmen würde.
gruss,
andreas
ich werde mich für die nächsten 5 bis 6 monate um relativ grosse projekte kümmern müssen und kann mich leider um dieses projekt nicht mehr gross weiter verfolgen (mindestens im moment nicht).
ich bin der meinung, dass der gewählte ansatz für die speicherung der konfiguration die bestehenden probleme lösen kann, ohne dass grosse eingriffe in den kern von contenido nötig sind.
wie gesagt werde ich mich leider in den nächsten monaten nicht darum kümmern können. im prinzip ist es ja fertig: ein paar kontrollen und die eine oder andere anpassung werden wohl noch nötig sein.
wäre schön, wenn das jemand aus der community übernehmen würde.
gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
Ich würde es auf jeden Fall testen wenn ich besser Bescheid wüsste was ich damit anfangen soll und was genau das macht?
Wohin muss der Code kopiert oder gespeichert werden, wie muss die Datei benannt werden?
Was genau ist dann damit möglich?
Wohin muss der Code kopiert oder gespeichert werden, wie muss die Datei benannt werden?
Was genau ist dann damit möglich?
Gruss,
Michael
"Keep on riding this Bike!" (Jackson Mulham)
Michael
"Keep on riding this Bike!" (Jackson Mulham)
du musst den anderen thread (siehe anfang) anschauen. dort steht alles. was damit möglich ist? nun, du kannst dann checkboxes machen und multiple selects, was ja derzeit nicht möglich ist.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
Hallo kummer,
super deine Erweiterung wdreiConf.class.inc.php. Das löst viele viele Aufgaben! Das kommt jetzt zwar sehr sehr spät, totzdem: habe das mal getestet:
a) Installation funktioniert ohne Probleme (habe die Datei im Ordner classes abgelegt und dann im Input und Output die Datei mit cInclude('classes', 'wdreiConf.class.inc.php'); eingebunden)
b) Dein Beispiel Input-Bereich erzeugt wie gewünscht die Tabelle con_wdreiconf und schreibt nach erfolgter Speicherung der Konfiguration eines Artikels die Daten.
Wenn ich einem Artikel das erste Mal eine Template zuweise und das erste Mal die Konfiguration aufrufe gibt es zuerst folgende Warnungen:
Warning: in_array(): Wrong datatype for second argument in C:\contenido\suedtirol-hoteltippit\contenido\classes\wdreiConf.class.inc.php on line 225
Sobald in den entsprechenden Feldern Daten eingegeben werden und die Konfiguration gespeichert wird verschwinden die Warnungen. Ist also kein Problem, sondern scheinbar nur eine Initialisierungsfrage. Also bis hier alles Bestens.
c) Ich habe aber Probleme mit dem Zugriff im auf den Inhalt der Felder im Output-Bereich (habe mich an dein Beispiel für den Output-Bereich aus dem ersten Thread gehalten). Irgendwie schaffe ich es nicht mit
$wdreiConf[$cCurrentContainer]->getValue(meinFeldbezeichner)
auf den Inhalt eines Feldes zuzugreifen. Eine Ausgabe mit echo gibt nichts aus, der Zeiger ist auf NULL gestellt. In der Datenbank in der Tabelle ist aber wie gesagt alles vorhanden.
Kannst du mir mal einen Tipp geben oder den Output-Code für einen korrekten Zugriff auf den Inhalt eines Feldes hier posten. Komme zwar mit PHP-Programmierung einigermaßen zurecht, aber mit objektorientiert habe ich leider noch meine Probleme.
super deine Erweiterung wdreiConf.class.inc.php. Das löst viele viele Aufgaben! Das kommt jetzt zwar sehr sehr spät, totzdem: habe das mal getestet:
a) Installation funktioniert ohne Probleme (habe die Datei im Ordner classes abgelegt und dann im Input und Output die Datei mit cInclude('classes', 'wdreiConf.class.inc.php'); eingebunden)
b) Dein Beispiel Input-Bereich erzeugt wie gewünscht die Tabelle con_wdreiconf und schreibt nach erfolgter Speicherung der Konfiguration eines Artikels die Daten.
Wenn ich einem Artikel das erste Mal eine Template zuweise und das erste Mal die Konfiguration aufrufe gibt es zuerst folgende Warnungen:
Warning: in_array(): Wrong datatype for second argument in C:\contenido\suedtirol-hoteltippit\contenido\classes\wdreiConf.class.inc.php on line 225
Sobald in den entsprechenden Feldern Daten eingegeben werden und die Konfiguration gespeichert wird verschwinden die Warnungen. Ist also kein Problem, sondern scheinbar nur eine Initialisierungsfrage. Also bis hier alles Bestens.
c) Ich habe aber Probleme mit dem Zugriff im auf den Inhalt der Felder im Output-Bereich (habe mich an dein Beispiel für den Output-Bereich aus dem ersten Thread gehalten). Irgendwie schaffe ich es nicht mit
$wdreiConf[$cCurrentContainer]->getValue(meinFeldbezeichner)
auf den Inhalt eines Feldes zuzugreifen. Eine Ausgabe mit echo gibt nichts aus, der Zeiger ist auf NULL gestellt. In der Datenbank in der Tabelle ist aber wie gesagt alles vorhanden.
Kannst du mir mal einen Tipp geben oder den Output-Code für einen korrekten Zugriff auf den Inhalt eines Feldes hier posten. Komme zwar mit PHP-Programmierung einigermaßen zurecht, aber mit objektorientiert habe ich leider noch meine Probleme.
Konnte das Problem eingrenzen und zumindest für mich lösen. In der Klasse wdreiConf in der Function restoreValues() wird in den drei SELECT Anweisungen auch die $idtbl in der WHERE Klausel abgefragt.
Der Inhalt dieser Variable stimmt bei mir nicht mit der Inhalt des Feldes idtbl in der Datenbank überein. Darum konnte die WEHRE Klausel keine Datensätze zum herausholen finden.
Ich habe einfach den Teil
AND idtpl = {$this->idtpl}
aus den WEHRE Klauseln rausgelöscht. Jetzt funktioniert das für mich mal aber leider überblicke ich nciht ob diese Modifikation andere Probleme aufwirft? (Benutze eine lokale Testinstallation Contenido 4.6.8, Moderewrite Variante von stese)
Der Inhalt dieser Variable stimmt bei mir nicht mit der Inhalt des Feldes idtbl in der Datenbank überein. Darum konnte die WEHRE Klausel keine Datensätze zum herausholen finden.
Ich habe einfach den Teil
AND idtpl = {$this->idtpl}
aus den WEHRE Klauseln rausgelöscht. Jetzt funktioniert das für mich mal aber leider überblicke ich nciht ob diese Modifikation andere Probleme aufwirft? (Benutze eine lokale Testinstallation Contenido 4.6.8, Moderewrite Variante von stese)