Seite 2 von 3
Verfasst: Mi 24. Okt 2007, 09:27
von wayfearer
es ging ja nicht darum das du das modul schreiben sollst, sondern zum besseren verständnis dir meienn code mal anschauen solltest, mehr nicht
ich hab ja aktuell nur das problem dass der die schleife zwar "richtig" abarbeitet aber die rückgabe des contenido skripts was in der datenbank hinterlegt war so nicht ganz funktioniert.
klar mit regEx könnte ich das machen, das problem ist halt nur ich bin nachher nicht der Redakteur und der Kunde muss es einfach haben.
Und da möchte ich potentielle Fehlerquellen vermeiden.
Und wenn der halt extra noch was eingeben muss dann ist das ne potentielle Fehlerquelle.
Mfg,
Marcel
Verfasst: Mi 24. Okt 2007, 09:45
von kummer
na dann poste den modul-code mal. draufschauen kann ich alleweil.
Verfasst: Mi 24. Okt 2007, 09:57
von wayfearer
So hier der Code auf aktuellem Stand:
Code: Alles auswählen
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : Tabbed Content
* Author(s) : Marcel Bensch
* Copyright : MISTRAL! marketing, Marcel Bensch
* Created : 23.10.2007
* Credits : Danke an kummer, und wosch für eure Hilfe !!!
************************************************/
/**
* Initialisierung des Moduls und der Modulvariablen
*/
$anzahl = "CMS_VALUE[1]";
$instance = "CMS_VALUE[2]";
//Überprüfen ob Daten übergeben wurden
if (!isset($anzahl) || empty($anzahl) || $anzahl="0")
{
$anzahl ="2";
}
if (!isset($instance) || empty($instance) || $instance == "0")
{
$instance == "1";
}
/**
* Bin ich im Bearbeitungsmodus oder nicht ?
*/
$editmode = false; // Standardinitialisierung der Variable ist false
if($contenido&&($view=="edit")){ // Überprüfung auf Editmode
$editmode = true; // Wenn okay, dann bin ich im Editmode
}
/**
* Abarbeitung des Skriptes je nach Modus (Editmode / Viewmode)
*/
//Editmode
if ($editmode===true) {
/**
* Includes der benötigten Klassen
*/
cInclude("includes", "functions.lang.php");
cInclude("classes", "class.htmlelements.php");
echo "<span style=\"background-color:gray;border:1px solid orange;color:white;\">----[Tabbed Content]----</span><br /><br /><blockquote>";
$val=40;
for($i=0;$i<=$anzahl;$i++)
{
echo "<span style=\"background-color:grey;border:1px solid orange;color:black;\">----[Tabbed Content Item Nr. $i]----</span><br />";
/**
* Editierbares Feld ausgeben, analog zu CMS_HTML[n]
*/
$tmp = $a_content['CMS_HTML'][$val];
$tmp = urldecode($tmp);
$tmp = AddSlashes(AddSlashes($tmp));
$tmp = str_replace("\\\'","'",$tmp);
$tmp = str_replace("\$",'\\\$',$tmp);
if ($tmp == "")
{
$tmp = " ";
}
$insiteEditingDIV = new cHTMLDiv;
$insiteEditingDIV->setId("HTML_".$db->f("idtype")."_".$val);
$insiteEditingDIV->setEvent("Focus", "this.style.border='1px solid #bb5577';");
$insiteEditingDIV->setEvent("Blur", "this.style.border='1px dashed #bfbfbf';");
$insiteEditingDIV->setStyleDefinition("border", "1px dashed #bfbfbf");
$insiteEditingDIV->setStyleDefinition("direction", langGetTextDirection($lang));
$insiteEditingDIV->updateAttributes(array("contentEditable" => "true"));
$insiteEditingDIV->setContent("_REPLACEMENT_");
/* Edit anchor and image */
$editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_HTML&typenr=$val");
$editAnchor = new cHTMLLink;
$editAnchor->setLink("javascript:setcontent('$idartlang','" . $editLink . "');");
$editButton = new cHTMLImage;
$editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_edithtml.gif");
$editButton->setBorder(0);
$editButton->setStyleDefinition("margin-right", "2px");
$editAnchor->setContent($editButton);
/* Save anchor and image */
$saveAnchor = new cHTMLLink;
$saveAnchor->setLink("javascript:setcontent('$idartlang','0')");
$saveButton = new cHTMLImage;
$saveButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_speichern.gif");
$saveButton->setBorder(0);
$saveAnchor->setContent($saveButton);
/* Process for output with echo */
$finalEditButton = $editAnchor->render();
$finalEditButton = AddSlashes(AddSlashes($finalEditButton));
$finalEditButton = str_replace("\\\'","'",$finalEditButton);
$finalEditingDiv = $insiteEditingDIV->render();
$finalEditingDiv = AddSlashes(AddSlashes($finalEditingDiv));
$finalEditingDiv = str_replace("\\\'","'",$finalEditingDiv);
$finalEditingDiv = str_replace("_REPLACEMENT_", $tmp, $finalEditingDiv);
$finalSaveButton = $saveAnchor->render();
$finalSaveButton = AddSlashes(AddSlashes($finalSaveButton));
$finalSaveButton = str_replace("\\\'","'",$finalSaveButton);
echo $finalEditingDiv . $finalEditButton . $finalSaveButton ;
$val++;
}
echo "</blockquote><span style=\"background-color:grey;border:1px solid orange;color:white;\">----[Tabbed Content End]----</span><br /><br />";
}
//Viewmode
else {
/** echo "<script type='text/javascript' language='JavaScript'>";
echo "var sheet_HTML". $instance." = Array();\n";
echo "function change_tabs_$instance(sheet)
{
//alert('sheet_tab' + sheet);
for(i=0;i<" , count(${$data.$instance}->sheets) , ";i++)
{
document.getElementById('sheet_tab$instance' + i).className = 'tab_base';
}
document.getElementById('table_loader_div$instance').innerHTML=sheet_HTML".$instance."[sheet];
document.getElementById('sheet_tab$instance' + sheet).className = 'tab_loaded';
}
";
echo "</script>";
echo "<div id=\"table_complete_$instance\" align=\"center\">";
echo "<div id=\"tabellen_tabs_$instance\">";
echo "<table class='table_tabs' NAME='tab_table_$instance' align='left'>";
echo "<tr>";
for($sheet=0;$sheet<count(${$data.$instance}->sheets);$sheet++)
{
echo "<td class='tab_base' id='sheet_tab".$instance.$sheet."' align='center'onmousedown=\"change_tabs_$instance($sheet);\">";
echo ${$data.$instance}->boundsheets[$sheet]['name'];
echo "</td>";
}
echo "</tr>";
echo "</table>";
echo "</div>";
echo "<div id=table_loader_div$instance></div>";
echo "<script type='text/javascript' language='JavaScript'>";
echo "change_tabs_$instance(0);";
echo "</script>";
echo "</div>";
echo "<div style=\"clear:both;\" ></div><p> </p>";
}
*/
echo "Funktioniert !";
}
?>
Das Javascript ist noch auskommentiert, da ich es noch nicht auf das Modul angepasst habe. Den Input muss ich noch entsprechend schreiben.
Mfg,
Marcel
Verfasst: Mi 24. Okt 2007, 10:03
von kummer
ich vermute das problem hier:
du willst ja $val iterieren. das müsste nach mir so aussehen:
gruss,
andreas
Verfasst: Mi 24. Okt 2007, 10:19
von OliverL
ich finde die Idee mit dem Seperator und Regex auch sehr gut.
hierfür würde ich aber für die einfache Pflege den "<hr>"-Tag verwenden, da die Darstellung eindeutig zwei Bereiche abtrennt und es im Tiny einen Button für doofe gibt
Desweiteren würde ich den ersten H1-Tag als Titel des Tab's verwenden
oder einen Tag mit einer bestimmten Classe.
(Auch ich habe das Zeit/Geld Problem und werde mich eventuel später nochmal darum kümmern )
Verfasst: Mi 24. Okt 2007, 10:28
von wayfearer
kummer hat geschrieben:ich vermute das problem hier:
du willst ja $val iterieren. das müsste nach mir so aussehen:
gruss,
andreas
Nicht ganz, die Schleife dient lediglich dazu die Anzahl der Container zu bestimmen, das funktioniert ja auch. das $val ist ja die laufende zahl.
Die soll mit 40 beginnen und bis xyz gehen.
deshalb wird außerhalb der schleife $val mit 40 initialisiert und am ende der schleife $val inkrementiert.
Schau dir das nochmal genau an:
Code: Alles auswählen
echo $finalEditingDiv . $finalEditButton . $finalSaveButton ;
$val++;
}
Ich vermute das Problem eher an folgenden Stellen:
Wo wird dieses Array initialisiert ?
Code: Alles auswählen
$insiteEditingDIV->setId("HTML_".$db->f("idtype")."_".$val);
Wo wird das Objekt $db initialisiert ?
Ich such mal weiter, wer ne Idee hat einfach posten
Mfg,
Marcel
P.s: Ich glaube das Zeit/Geld Problem hat jeder und deswegen schließt man sich ja in einer Community zusammen um sich gegenseitig zu helfen und mit Ideen zu bereichern. ich würd mal sagen ein Geben und ein Nehmen, für die Hilfe bekommt man ja nachher auch wieder was zurück meistens in Form von nem neuen OpenSource Script.
Verfasst: Mi 24. Okt 2007, 11:07
von kummer
gib doch die beiden werte mal mit einem echo an den schirm? der aufruf von $db->f("idtype") sollte eigentlich - glaube ich - eine 1 zurückgeben.
Verfasst: Mi 24. Okt 2007, 11:14
von wayfearer
der gibt mir eben gar nichts aus, das ist ja mein problem.
ich denke mal in $db versteckt sich ja ein Contenido Datenbank Objekt.
Allerdings liefert mir das halt nichts zurück komischerweise.
Genauso das Array, nix drin.
Aber ich habe auch keine Fehlermeldungen auf dem Schirm.
Verfasst: Mi 24. Okt 2007, 11:21
von kummer
dann schau dir doch mal den inhalt der con_code an. und zwar von einem eintrag, der ein CMS_HTML verwendet (also nicht von deinem neuen modul). möglicherweise wird noch vor dem modul selber code ausgeführt, der dann im inneren verwendet wird, respektive auf den bezug genommen wird.
die idtype kannst du im übrigen ganz normal direkt als wert setzen. du musst einfach wissen, welcher wert es ist. der dürfte sich dann nicht mehr ändern.
Verfasst: Mi 24. Okt 2007, 11:23
von wayfearer
das mit der idtype als wert hab ich shcon probiert.
Gibt es eigentlich eine aktuelle API-doc zur 4.6.15 ??? Heb nur die von der 4.4.x
Mfg,
Marcel
Verfasst: Mi 24. Okt 2007, 11:30
von wayfearer
In der con_code sind die CMS_HTML oder CMS_HTMLHEAD Elemente schon alle geparse so das da nicht mehr der eigentliche Moduloutput steht sonder halt schon die fertigen Werte eingesetzt wurden, bringt mich so also nicht weiter. Ich stöber mal ein bisschen durch die DB vielleicht finde ich ja noch was.
Verfasst: Mi 24. Okt 2007, 12:45
von wayfearer
Okay ich habe ein bisschen gestöbert aber nichts gefunden, dann habe ich mir mal den Quelltext im Backend angeschaut wenn ich bei dem entsprechenden Artikel auf Editor geklickt habe folgendes kam dabei heraus:
Ausschnitt aus dem relevanten Bereich:
Code: Alles auswählen
<span style="border: 1px solid orange; background-color: gray; color: white;">----[Tabbed Content]----</span>
<br/>
<br/>
<blockquote>
<span style="border: 1px solid orange; background-color: grey; color: black;">----[Tabbed Content Item Nr. 0]----</span>
<br/>
<div id="\\\"HTML_2_40\\\"" ltr;\\\="" #bfbfbf;direction:="" dashed="" 1px="" style="" contenteditable="\\\"true\\\"" ;\\\="" #bfbfbf\="" onblur="\\\"this.style.border=\'1px" #bb5577\="" solid="" onfocus="\\\"this.style.border=\'1px"/>
<a id="\\\"m2\\\"" href="\\\"javascript:setcontent(\'12\',\'front_content.php?action=10&idcat=26&idart=12&idartlang=12&type=CMS_HTML&typenr=40&contenido=531fdeb52cb5121cd9aadf43e2bc3855\');\\\"">
</a>
<a id="\\\"m4\\\"" href="\\\"javascript:setcontent(\'12\',\'0\')\\\"">
</a>
<span style="border: 1px solid orange; background-color: grey; color: black;">----[Tabbed Content Item Nr. 1]----</span>
<br/>
<div id="\\\"HTML_2_41\\\"" ltr;\\\="" #bfbfbf;direction:="" dashed="" 1px="" style="" contenteditable="\\\"true\\\"" ;\\\="" #bfbfbf\="" onblur="\\\"this.style.border=\'1px" #bb5577\="" solid="" onfocus="\\\"this.style.border=\'1px"/>
<a id="\\\"m7\\\"" href="\\\"javascript:setcontent(\'12\',\'front_content.php?action=10&idcat=26&idart=12&idartlang=12&type=CMS_HTML&typenr=41&contenido=531fdeb52cb5121cd9aadf43e2bc3855\');\\\"">
</a>
<a id="\\\"m9\\\"" href="\\\"javascript:setcontent(\'12\',\'0\')\\\"">
</a>
<span style="border: 1px solid orange; background-color: grey; color: black;">----[Tabbed Content Item Nr. 2]----</span>
<br/>
<div id="\\\"HTML_2_42\\\"" ltr;\\\="" #bfbfbf;direction:="" dashed="" 1px="" style="" contenteditable="\\\"true\\\"" ;\\\="" #bfbfbf\="" onblur="\\\"this.style.border=\'1px" #bb5577\="" solid="" onfocus="\\\"this.style.border=\'1px"/>
<a id="\\\"m12\\\"" href="\\\"javascript:setcontent(\'12\',\'front_content.php?action=10&idcat=26&idart=12&idartlang=12&type=CMS_HTML&typenr=42&contenido=531fdeb52cb5121cd9aadf43e2bc3855\');\\\"">
</a>
<a id="\\\"m14\\\"" href="\\\"javascript:setcontent(\'12\',\'0\')\\\"">
</a>
</blockquote>
<span style="border: 1px solid orange; background-color: grey; color: white;">----[Tabbed Content End]----</span>
Und so sieht es bei normalen CMS_HTML Elementen aus:
Code: Alles auswählen
<div id="content">
<div id="HTML_2_1" style="border: 1px dashed rgb(191, 191, 191); direction: ltr;" contenteditable="true" onblur="this.style.border='1px dashed #bfbfbf';" onfocus="this.style.border='1px solid #bb5577';">
</div>
<a id="m2" href="javascript:setcontent('14','front_content.php?action=10&idcat=27&idart=14&idartlang=14&type=CMS_HTML&typenr=1&contenido=531fdeb52cb5121cd9aadf43e2bc3855');">
</a>
<a id="m4" href="javascript:setcontent('14','0')">
</a>
<br/>
<br/>
Ich würde mal sagen da stimmt was nicht was die Slashes angeht.
Verfasst: Mi 24. Okt 2007, 12:58
von wayfearer
So ich darf damit verkünden:
Es funktioniert !
Ich musste nur die AddSlashes und String Replaces rausnehmen, da die wohl nur für das parsen von CMS_HTML notwendig sind.
Also ich bastel dann mal weiter und ihr dürft euch dann schonmal auf ein nettes kleines Modülchen freuen.
Noch mal vielen Dank an alle, besonders an kummer
Mfg,
Marcel
Verfasst: Mi 24. Okt 2007, 14:13
von kummer
bitte, bitte...

und wir freuen uns natürlich, wenn das teil publiziert werden wird!
Verfasst: Mi 24. Okt 2007, 14:40
von conradius
hey wayfearer,
ich will ja nicht die ganze Arbeit wieder zunichte machen, aber ich hätte da eine ganz andere Idee für ein Tab-Liste (sorry). Ich nehme zwar an, dass Du jetzt nicht mehr umsteigst...
Die wäre so: Du erstellst eine Artikelliste (einfach eine ul aller Artikel in einer Kategorie), die stylest Du dann so, dass sie horizontal als Tabs erscheinen und bindest dieses Modul in den entsprechenden Tab-Templates dann einfach oberhalb des normal zu gebrauchenden Text-HTML Inhalts ein.
Ich habe da mal so ein Modul erstellt, falls Du noch Interesse hast...
Ein Beispiel dazu findest Du hier:
http://www.spur-wechsel.ch/front_content.php?idart=10
Gruss,
Conradius