Seite 1 von 3

Problem: Mehrere CMS_HTML und CMS_HTMLHEAD dynamisch

Verfasst: Di 23. Okt 2007, 17:26
von wayfearer
Hallo Leute,

jetz melde ich mich hier auch mal mit einer/einem Frage/Problem zu Wort.

Als Erstes möchte ich euch die Situation beschreiben, ist nicht ganz einfach aber ich versuchs einfach mal:

Um editierbare Inhalte zu erstellen nutz man ja normalerweise das Modul Text HTML oder Headline. Diese basiert darauf das ein Systeminterner Platzhalter - beim Inhalt "CMS_HTML[n]" - mit einem Index übergeben wird.

So um mehrere editierbare Inhalte zu nutzen muss man ja nur den Index um 1 erhöhen also bsp "CMS_HTML[3]".

So, jetzt möchte ich zum eigentlichen Punkt kommen.

Ich benötige eine dynamische Anzahl dieser "CMS_HTML[n]" Blöcke. Und zwar wird diese Über den Input des Moduls festgelegt.

Da hab ich mir gedacht, alles klar, gar kein Problem. Eben schnell in eine for-Schleife das ganze. Variablen etnsprechen abrufen, initalisieren und inkrementieren und schwups läuft das.

Tja ich wurde eines Besseren belehrt. Sobald ich z.B. an Stelle von:
echo "CMS_HTML[1]";
folgendes schreibe:
echo "CMS_HTML[$i]";
Nimmt Contenido es nicht mehr als editierbaren Contentbereich an sonder haut mir im Backend einfach z.B. "CMS_HTML[45]" als String raus.

Ich habe bereits unterschiedlichste Schreibweisen (print, echo, mit . verketten, javascript, u.s.w) ausprobiert, bin aber noch zu keinem Ergebnis gekommen.

Da seid Ihr jetzt gefragt ! Vielleicht hat ja einer die zündende Idee und weiß mit zu sagen was ich machen könnte.

Ich müsste relativ schnell zu einem Ergebnis kommen, da - wie das halt so ist - mein Chef und der Kunde mir im Nacken sitzen.

Schonmal Danke im Voraus! :D

MfG,

Marcel

Verfasst: Di 23. Okt 2007, 21:06
von wosch
@wayfearer,

ich meine so ein Modul (oder zumindest so ähnlich) gibt es schon.
Es könnte von baumpaul gewesen sein.
Such mal hier im Modulthread, im Titel stand etwas von multipel oder mehrfach.

Verfasst: Di 23. Okt 2007, 21:22
von wayfearer
Super wosch !

Das hat mich auf jeden Fall schonmal ein Stück weitergebracht. Der Lösungsansatz über ein Array zu gehen ist natürlich echt super (dass ich da nicht selbst drauf gekommen bin *g* :oops: ). Allerdings noch nicht unbedingt ganz so schön wie ich mir das vorstelle. Also wenn noch jemand anderes ne Idee hat wär das schon cool. Aber für die Schnelle reciht das denke ich erst mal !


Mit bestem Dank !

Marcel

Verfasst: Mi 24. Okt 2007, 08:02
von kummer
nun von grund auf programmieren lässt sich das auf jeden fall. normalerweise werden die CMS_HTML durch eine Ersetzung im code ausgegeben. allerdings kann auch gleich das resultat erzeugen, dass durch die ersetzung der CMS_HTML erzeugt wird. ist zwar komplizierter, bringt allerdings genau das resultat, das du dir vermutlich vorstellst.

Verfasst: Mi 24. Okt 2007, 08:04
von wayfearer
Das wäre sicherlich dann die programmatisch gesehen sauberste Lösung. Denn in einem Array bin ich ja wieder ziemlich festgelegt auf eine XYZ Anzahl. Weiß zufällig einer welche Datei da zum Greifen kommt die den Platzhalter parsed, wo ich sehen kann was da letzt endlich rausgegeben wird ??

Verfasst: Mi 24. Okt 2007, 08:07
von kummer
das siehst du im quellcode im editiermodus.

Verfasst: Mi 24. Okt 2007, 08:10
von wayfearer
Steht wies aussieht alles in der con_type drin. Versuche da mal weiter zu kommen.

Dann noch mal ein dickes Dankeschön an euch beide !!

Marcel

Verfasst: Mi 24. Okt 2007, 08:18
von kummer
das sollte dieser code sein:

Code: Alles auswählen

/** 
 * CMS_HTML 
 */ 
$tmp = $a_content['CMS_HTML'][$val]; 
$tmp = urldecode($tmp); 

$tmp = AddSlashes(AddSlashes($tmp)); 
$tmp = str_replace("\\\'","'",$tmp); 
$tmp = str_replace("\$",'\\\$',$tmp); 

cInclude("includes", "functions.lang.php"); 
cInclude("classes", "class.htmlelements.php"); 

if ($edit) { 
    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); 
    
    $tmp =  $finalEditingDiv . $finalEditButton . $finalSaveButton;
}
so wie ich die sachlage einschätze, müsste es ausreichen, die variable $val innerhalb einer schleife zu setzen. dann würde ich vielleicht aus performancegründen noch die includes aus der schleife nehmen und vor der schleife includieren.

Verfasst: Mi 24. Okt 2007, 08:25
von wayfearer
Genau so hab ich es jetzt auch gemacht !

Vielen Dank trotzdem !

Mfg,

Marcel

Verfasst: Mi 24. Okt 2007, 08:30
von OliverL
Ich verwende immer dieses Modul:

# INPUT ------------------------------------------------------------------

Code: Alles auswählen

?><?php

$myNumber = "CMS_VALUE[0]" != "" ? "CMS_VALUE[0]" : "";

echo '<table cellpadding="0" cellspacing="10" border="0">
  <colgroup><col width="200" /><col width="*" /></colgroup>
  <tr><td>'.mi18n("label_number").'</td><td><input type="text" name="CMS_VAR[0]" value="'.$myNumber.'" size="10"></td></tr>
</table>';

?><?php
# OUTPUT ------------------------------------------------------------------

Code: Alles auswählen

<?php 
  echo "CMS_HTMLHEAD[CMS_VALUE[0]]"; 
?>

Verfasst: Mi 24. Okt 2007, 08:35
von kummer
das erzeugt allerdings nur ein einzelnes CMS_HTML mit dem von dir bezeichneten index. oder sehe ich das falsch?

Verfasst: Mi 24. Okt 2007, 08:57
von OliverL
Ne erzeugt nur eins.

Wie sieht denn die genaue Problematik aus?
mehrere HTMLO-Felder untereinander halte ich für Sinnlos.
Kann man eventuel ein Layout oder eine Seite sehen was rauskommen soll?

mfg

Verfasst: Mi 24. Okt 2007, 09:01
von kummer
nun, das müsste der ursprüngliche autor des threads sagen. ich kenne die situation auch nicht. aber ich könnte mir schon fälle vorstellen, wo das sinnvoll sein kann. z.b. wenn man vermeiden möchte, zu grosse editierbare bereiche erstellen zu müssen. für einen redaktor kann das durchaus hilfreich sein, nicht einen einzigen rieisigen bereich pflegen zu müssen.

Verfasst: Mi 24. Okt 2007, 09:04
von wayfearer
Ja das erzeugt nur eins denn ich müsste ja in ner Schleife CMS_VALUE[$i] schreiben, und das versteht Contenido ja genausowenig wie CMS_HTML[$i]

Okay, passt auf zur Erläuterung des Projekts:

Ich möchte ein Tabbed Content Modul basteln, welches die Möglichkeit bietet mehrere <div> Blöcke mit beliebigen Inhalt über Tabs zu steuern. Für die Ausgabe in der Seite verwende ich ein Javascript welches dann unterschiedliche Divs mit dem Inhalten initialisiert, in einem Array speichert und dann entsprechend ausgibt.

Aber um die Inhalte zu bearbeiten muss ich ja auch ne Möglichkeit bieten. Dazu will ich die normale Contenido Maske nutzen. Also zum vorgehen:

Es werden n CMS_HTML Elemente und n CMS_HTMLHEAD Elemente erzeugt über welche ich dann Tabnamen und Inhalt eingeben kann im Editiermodus. Im Forntend werden diese über das Javascript entsprechend verarbeitet.

Deshalb brauch ich halt mehrere untereinander weil der Nutzer soll festlegen können, wieviel Content er tabben möchte und der darf sich ja nicht mit dem "static" Content überschneiden.

So eigentlich hab ich das auch schon soweit stehen, nur irgendwie bekomm ich keine Ausgebe der Editierfelder hin ich bastel halt noch. Wenn du Zeit hast Kummer, kannst du ja auch mal drüber schauen, die Daten würde ich dir in ICQ zukommen lassen oder per PM oder Tele oder wie auch immer.

Mfg,

Marcel

Verfasst: Mi 24. Okt 2007, 09:17
von kummer
das mit der zeit ist so eine sache. ich helfe gerne... aber ich verdiene gern auch was. :oops: und das kommt sich zuweilen in die quere. ich kann dir so ein modul erstellen. das würde allerdings eine kleinigkeit kosten.

ich habe dir einfach noch einen alternativvorschlag:

(1) nur ein cms_html verwenden.

(2) verschiedene tabs mit einem tag trennen, das im allgemeinen nicht verwendet wird. oder einem platzhalter. also z.b. so...

Code: Alles auswählen

###meinTabBezeichner###
(3) dann mit regex den ganzen inhalt an den platzhaltern trennen und tabs mit den bezeichnern erstellen, die sich innerhalb der rauten finden.

das geht ganz sicher schneller. und ist mindestens so performant. und es hat einen vorteil: du kannst dann dieses modul als ganz normales text-modul verwenden. die tabs würden ja dann immer nur dann erstellt, wenn der redaktor diesen platzhalter verwendet.

wenn du dir sowas machen lassen möchtest, sendest du mir einfach eine pm. ich mache dir dann gerne ein angebot.

gruss,
andreas