Problem: Mehrere CMS_HTML und CMS_HTMLHEAD dynamisch

wayfearer
Beiträge: 84
Registriert: Fr 13. Apr 2007, 17:37
Wohnort: Siegen
Kontaktdaten:

Problem: Mehrere CMS_HTML und CMS_HTMLHEAD dynamisch

Beitrag 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
wosch

Beitrag 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.
wayfearer
Beiträge: 84
Registriert: Fr 13. Apr 2007, 17:37
Wohnort: Siegen
Kontaktdaten:

Beitrag 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
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag 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.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
wayfearer
Beiträge: 84
Registriert: Fr 13. Apr 2007, 17:37
Wohnort: Siegen
Kontaktdaten:

Beitrag 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 ??
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

das siehst du im quellcode im editiermodus.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
wayfearer
Beiträge: 84
Registriert: Fr 13. Apr 2007, 17:37
Wohnort: Siegen
Kontaktdaten:

Beitrag 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
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag 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.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
wayfearer
Beiträge: 84
Registriert: Fr 13. Apr 2007, 17:37
Wohnort: Siegen
Kontaktdaten:

Beitrag von wayfearer »

Genau so hab ich es jetzt auch gemacht !

Vielen Dank trotzdem !

Mfg,

Marcel
Zitat des Tages:
Web 2.0 ist ... wenn selbst die Antiterror-Datei XML kompatibel ist !

_________________

Was kam zuerst: Das Huhn oder das Ei ?

Das Antwortet der OOP-Entwickler:
Das Ei ist das Objekt, welches aus der Klasse Huhn abgeleitet wird. Die Klasse Huhn erweitert die Klasse Hühnerstall.

Das Antwortet der Christ:
Und Gott schuf Himmel und Erde, die Pflanzen, die Tiere, die Menschen ... und keine Eier!-)
OliverL
Beiträge: 870
Registriert: Do 28. Jun 2007, 09:28
Kontaktdaten:

Beitrag 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]]"; 
?>
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

das erzeugt allerdings nur ein einzelnes CMS_HTML mit dem von dir bezeichneten index. oder sehe ich das falsch?
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
OliverL
Beiträge: 870
Registriert: Do 28. Jun 2007, 09:28
Kontaktdaten:

Beitrag 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
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag 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.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
wayfearer
Beiträge: 84
Registriert: Fr 13. Apr 2007, 17:37
Wohnort: Siegen
Kontaktdaten:

Beitrag 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
Zitat des Tages:
Web 2.0 ist ... wenn selbst die Antiterror-Datei XML kompatibel ist !

_________________

Was kam zuerst: Das Huhn oder das Ei ?

Das Antwortet der OOP-Entwickler:
Das Ei ist das Objekt, welches aus der Klasse Huhn abgeleitet wird. Die Klasse Huhn erweitert die Klasse Hühnerstall.

Das Antwortet der Christ:
Und Gott schuf Himmel und Erde, die Pflanzen, die Tiere, die Menschen ... und keine Eier!-)
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag 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
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
Gesperrt