CMS_CONTAINER in Variablen speichern

Gesperrt
PickPay
Beiträge: 164
Registriert: Di 2. Dez 2003, 19:38
Wohnort: Zürich
Kontaktdaten:

CMS_CONTAINER in Variablen speichern

Beitrag von PickPay »

Hallo zusammen.

Kann mir einer erklären, weshalb dieser Code als Layout nicht funktioniert?

Code: Alles auswählen

<?PHP

$CMS[1] = "CMS_CONTAINER[1]";

?>
Das gibt andauernd einen Syntaxerror.

Nun weshalb ich frage: Zwecks fehlerhafter Editierung im Layouteditor (funktioniert je nach Layout nicht) möchte ich meine Layouts in einer externen Datei abspeichern. Dazu muss ich allerdings ja die Container vom Layout bestücken lassen was wie gesagt nicht funktioniert.

Allgemein: Ich fände es sinnvoll, wenn man das Layout auch als Datei einbinden könnte. Sprich die Auswahl zwischen direkter Formulareingabe oder Verweis auf eine Datei.
PickPay
Beiträge: 164
Registriert: Di 2. Dez 2003, 19:38
Wohnort: Zürich
Kontaktdaten:

Beitrag von PickPay »

Okay, ich habe jetzt selber was gemacht. Die Idee dahinter ist, dass man im Layoutformularfeld anstatt dem HTML-Layout
FILE=path/to/template.html
angegeben werden kann. Der Pfad ist dabei relativ zum Client-Root $cfgClient[$client]['path']['frontend'], also in der Regel zu /path/to/htdocs/cms/.

Nun wird, falls gefunden, das Layout aus der Datei in folgenden Bereichen verwendet:
- Frontend natürlich
- Artikel-Edit ebenso
- Layout-Vorschau
- Container visuell setzten

Dies funktioniert nur, wenn das obige Format mit FILE=.. verwendet wird, ansonsten kann man ganz normal seine HTML-Layouts ins Formularfeld geben.

Änderungen betriffen die folgenden Dateien:

functions.tpl.php
Zeile 185 in der funktion tplBrowseLayoutForContainers

Code: Alles auswählen

        global $cfgClient;
        global $client;
einfügen.

Anschliessend bei Zeile 192 gleich nach $code = $db->f("code");

Code: Alles auswählen

        if (substr(trim($code),0,5)=='FILE=') {
            $code = file_get_contents($cfgClient[$client]['path']['frontend'].substr(trim($code),5));
        }
Das ganze nochmals etwas weiter unten bei Zeile 335 in der FunktiontplPreparseLayout


functions.con2.php
Selbes vorgehen wie oben, hier auf Zeile 226, wobei die globale Variablen bereits gesetzt sind.

include.lay_preview.php
Selbes vorgehen wie oben, hier auf Zeile 12 wobei die globale Variablen bereits gesetzt sind.

include.tpl_visualedit.php
Selbes vorgehen wie oben, hier auf Zeile 86 wobei die globale Variablen bereits gesetzt sind.

include.con_editcontent.php
Selbes vorgehen wie oben, hier auf Zeile 80 wobei die globale Variablen bereits gesetzt sind.
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Hallo PickPay,

grundsätzlich keine so schlechte Idee, aber vielleicht sollte man noch ein bisschen Suchen, warum Deine Layouts mit dem Layout-Editor Probleme geben.

Zu Deinen Fragen:
Kann mir einer erklären, weshalb dieser Code als Layout nicht funktioniert?
Ein Layout entspricht einer HTML-Seite, die über die üblichen Elemente verfügen muss (<head>, <body> usw. natürlich auch mit dem jeweils schließenden Tag!).

Was Du gepostet hast, ist kein Layout.
Nun weshalb ich frage: Zwecks fehlerhafter Editierung im Layouteditor (funktioniert je nach Layout nicht) möchte ich meine Layouts in einer externen Datei abspeichern.


Wir reden von Style -> Layout? Welches Problem tritt den bei Deinen Layouts auf?

Welche C-Version?

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
PickPay
Beiträge: 164
Registriert: Di 2. Dez 2003, 19:38
Wohnort: Zürich
Kontaktdaten:

Beitrag von PickPay »

grundsätzlich keine so schlechte Idee, aber vielleicht sollte man noch ein bisschen Suchen, warum Deine Layouts mit dem Layout-Editor Probleme geben.
Suchen ist klar, die Frage ist wo. Anstatt in Contenido den Fehler zu suchen (ich wüsste auch gar nicht wo), suchte ich eine Lösung mit externen Layoutdateien.
Ich bin damit ganz zufrieden.
Was Du gepostet hast, ist kein Layout.
Gut, hätte ich hier noch vervollständigen sollen. Habe ich auch lokal gemacht, funktionierte aber trotzdem nicht.
Wir reden von Style -> Layout? Welches Problem tritt den bei Deinen Layouts auf?
Ja Style->Layout.
Nun, isbesondere konnte ich zwei Probleme beobachten:
Je nach dem wurden JavaScripts unbrauchbar gemacht (Klammern gelöscht oder ähnlich)
Je nach Layout (w3c-validiert) wurde bei mir gar nichts mehr angezeigt (ausser meinem per CSS definierten Hintergrundbild).
In beiden Fällen war in den Errorlogs nichts von einem Fehler zu entnehmen.
Welche C-Version?
Contenido 4.5.3 Beta, die erwähnten Probleme hatte icha allerdings bereits in früheren 4.4.x Versionen.
Zuletzt geändert von PickPay am Mo 25. Jul 2005, 13:51, insgesamt 4-mal geändert.
Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin »

PickPay hat geschrieben:Neuste Contenido Version
neueste alpha, neueste beta, neueste CVS ... ?
PickPay
Beiträge: 164
Registriert: Di 2. Dez 2003, 19:38
Wohnort: Zürich
Kontaktdaten:

Beitrag von PickPay »

Contenido 4.5.3 Beta

Wie gesagt: Zumindest für micht habe ich mit den externen Daten eine ideale Lösung gefunden.

Ein weiterer Vorteil ergibt sich dann auch: Man kann lokal, während der Entwicklungszeit eines Projekts, die Layoutdateien mit einem beliebigen Editor editieren und muss nicht nach jeder änderung Ctrl-C / Ctrl-V.

Ein Problem stellt sich allerdings noch: Da sich ja das in der Datenbank gespeicherte Layout (FILE=..) nicht ändert, wird auch trotz modifizierter Layoutdatei kein neuer Code in con_code generiert. Aber ich denke es sollte kein Problem sein, auch dies noch zu korrigieren.
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Aber ich denke es sollte kein Problem sein, auch dies noch zu korrigieren.
So einfach ist es leider nicht. Aber Du könntest die con_code einfach leeren (nicht löschen!).

Ansonsten, könntest Du mal ein Layout zur Verfügung stellen, mit dem Contenido nichts anfangen konnte bzw. Du Probleme hattest?

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
PickPay
Beiträge: 164
Registriert: Di 2. Dez 2003, 19:38
Wohnort: Zürich
Kontaktdaten:

Beitrag von PickPay »

Ja, ich lösche jeweils con_code von Hand. Eine automatische Routine zu integrieren erscheint mir allerdings nicht den Aufwand wert. Wie HerrB gesagt hat, so einfach ist es nicht. Denn man müsste ja stets kontrolieren, ob sich in der entsprechenden Datei was getan hat, etwa in dem man das Datum der letzten Änderungen speichert.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

PickPay hat geschrieben:Eine automatische Routine zu integrieren erscheint mir allerdings nicht den Aufwand wert.
da gibts nen netten parameter den man in der config.php des mandanten setzen könnte...
-> $force=1;
*** make your own tools (wishlist :: thx)
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Ähm, das wäre noch schön:
Ansonsten, könntest Du mal ein Layout zur Verfügung stellen, mit dem Contenido nichts anfangen konnte bzw. Du Probleme hattest?
Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
PickPay
Beiträge: 164
Registriert: Di 2. Dez 2003, 19:38
Wohnort: Zürich
Kontaktdaten:

Beitrag von PickPay »

emergence hat geschrieben:
PickPay hat geschrieben:Eine automatische Routine zu integrieren erscheint mir allerdings nicht den Aufwand wert.
da gibts nen netten parameter den man in der config.php des mandanten setzen könnte...
-> $force=1;
Ja, aber dann würde der Code doch bei jedem Seitenaufruf neu generiert. Würde dies nicht unnötig viel Rechenleistung fordern?

@HerrB
Moment. Kommt.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

PickPay hat geschrieben:Ja, aber dann würde der Code doch bei jedem Seitenaufruf neu generiert. Würde dies nicht unnötig viel Rechenleistung fordern?
ähm, das ist ja nur notwendig solange du die ausgelagerten files dauernt änderst oder ? ich hab projekte wo ich dann 10 monate nichts mehr ändern muss... somit sehe ich kein problem
*** make your own tools (wishlist :: thx)
PickPay
Beiträge: 164
Registriert: Di 2. Dez 2003, 19:38
Wohnort: Zürich
Kontaktdaten:

Beitrag von PickPay »

... in der Tat. Das stimmt. :wink:
PickPay
Beiträge: 164
Registriert: Di 2. Dez 2003, 19:38
Wohnort: Zürich
Kontaktdaten:

Beitrag von PickPay »

@ HerrB

Hier mal noch das Layout, das nicht funktioniert. Ich vermute, es könnte wegen den integrierten PHP-Snipets sein.

Code: Alles auswählen

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="/cms/css/format_1.css">
<script src="/cms/js/menue.js" type="text/javascript"></script>
</head>
<?PHP

 // Liest von der aktuellen Kategorie die übergeordneten Ebenen ein
 $ebene=array();
 $cat=$idcat;
 do {
     $query='SELECT parentid,idcat FROM '.$cfg["tab"]["cat"].' WHERE idcat='.$cat.';';
     $db->query($query);
     $db->next_record();
     $cat=$db->f('parentid');
     $ebene[]=$db->f('idcat');
 } while ($cat!=0);
 $ebene=array_reverse($ebene);
 // END
 // array(idcat, img_nr, width, alias)
 $hn = array(
    array(2,1,49, 'heim/'),
    array(3,2,117,'sprachrohr/'),
    array(4,3,69, 'hofmaler/'),
    array(5,4,92, 'arbeit/'),
    array(6,5,74, 'galerie/')
 );
 $hn_preload_list='';
 $hn_buttons='';
 foreach ($hn as $v) {
     $hn_preload_list.='\'/cms/images/hn_'.$v[1].'_o.png\', ';
     if ($ebene[1]==$v[0]) {
         $hn_buttons.='<td width="'.$v[2].'"><a href="/cms/'.$v[3].'" style="border: none;"><img src="/cms/images/hn_'.$v[1].'_a.png" name="hn_'.$v[1].'" width="'.$v[2].'" height="20" border="0"></a></td>'."\n";
     }
     else {
         $hn_buttons.='<td width="'.$v[2].'"><a href="/cms/'.$v[3].'" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage(\'hn_'.$v[1].'\',\'\',\'/cms/images/hn_'.$v[1].'_o.png\',1)" style="border: none;"><img src="/cms/images/hn_'.$v[1].'_n.png" name="hn_'.$v[1].'" width="'.$v[2].'" height="20" border="0"></a></td>'."\n";
     }
 }
 //$hn_preload_list=substr($hn_preload_list,0,strlen($hn_preload_list)-2);

?>
<body onLoad="MM_preloadImages(<?PHP echo $hn_preload_list; ?> '/cms/images/hn_6_o.png')">
<table width="800" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="30" rowspan="17" background="/cms/images/lr.png">&nbsp;</td>
    <td width="740"><img src="/cms/images/tl_1.png" width="740" height="10"></td>
    <td width="30" rowspan="17" background="/cms/images/rr.png">&nbsp;</td>
  </tr>
  <tr>
    <td><img src="/cms/images/tl_2.png" width="740" height="10"></td>
  </tr>
  <tr>
    <td><img src="/cms/images/tl_3.png" width="740" height="20"></td>
  </tr>
  <tr>
    <td><img src="/cms/images/tl_4.png" width="740" height="10"></td>
  </tr>
  <tr>
    <td><table width="740" border="0" cellspacing="0" cellpadding="0">
      <tr>
<td width="15"><img src="/cms/images/hn_l.png" width="15" height="20"></td>
<?PHP echo $hn_buttons; ?>
<td width="247"><img src="/cms/images/hn_m.png" width="247" height="20"></td>
<?PHP if ($ebene[1]==7) { ?>
<td width="67"><a href="/cms/kontakte/" style="border: none;"><img src="/cms/images/hn_6_a.png" name="hn_6" width="67" height="20" border="0"></a></td>
<?PHP } else { ?>
<td width="67"><a href="/cms/kontakte/" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('hn_6','','/cms/images/hn_6_o.png',1)" style="border: none;"><img src="/cms/images/hn_6_n.png" name="hn_6" width="67" height="20" border="0"></a></td>
<?PHP } ?>
<td width="10"><img src="/cms/images/hn_r.png" width="10" height="20"></td>
      </tr>
    </table></td>
  </tr>
  <tr>
    <td><img src="/cms/images/tl_5.png" width="740" height="30"></td>
  </tr>
  <tr>
    <td><img src="/cms/images/tl_6.png" width="740" height="20"></td>
  </tr>
  <tr>
    <td><img src="/cms/images/tl_7.png" width="740" height="20"></td>
  </tr>
  <tr>
    <td><table width="740" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="20"><img src="images/lg_l.png" width="20" height="40"></td>
        <td width="350"><a href="/" style="border: none;"><img src="images/lg.png" width="350" height="40" border="0"></a></td>
        <td width="370"><img src="images/lg_r.png" width="370" height="40"></td>
      </tr>
    </table></td>
  </tr>
  <tr>
    <td><img src="/cms/images/ml_1.png" width="740" height="6"></td>
  </tr>
  <tr>
    <td><table width="740" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="40"><img src="/cms/images/bmp_l.png" width="40" height="84"></td>
        <td width="385"><img src="/cms/images/bmp_1.jpg" width="385" height="84"></td>
        <td width="35"><img src="/cms/images/bmp_m1.png" width="35" height="84"></td>
        <td width="105"><img src="/cms/images/bmp_2.jpg" width="105" height="84"></td>
        <td width="35"><img src="/cms/images/bmp_m2.png" width="35" height="84"></td>
        <td width="45"><img src="/cms/images/bmp_3.jpg" width="45" height="84"></td>
        <td width="95"><img src="/cms/images/bmp_r.png" width="95" height="84"></td>
      </tr>
    </table></td>
  </tr>
  <tr>
    <td><img src="/cms/images/ml_2.png" width="740" height="30"></td>
  </tr>
  <tr>
    <td><img src="/cms/images/ml_3.png" width="740" height="20"></td>
  </tr>
  <tr>
    <td><table width="740" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="10"><img src="/cms/images/wb.png" width="10" height="20"></td>
        <td width="210"><img src="/cms/images/obsessed_neustes.png" width="210" height="20"></td>
        <td width="510"><img src="/cms/images/cnt_o.png" width="510" height="20"></td>
        <td width="10"><img src="/cms/images/wb.png" width="10" height="20"></td>
      </tr>
      <tr>
        <td height="700" background="/cms/images/wb.png">&nbsp;</td>
        <td align="left" valign="top" background="/cms/images/serv_hg.png"><table width="210" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td width="10"><img src="/cms/images/obsessed_neustes_rd.png" width="10" height="60"></td>
            <td width="190">CMS_CONTAINER[1]</td>
            <td width="10">&nbsp;</td>
          </tr>
          <tr>
            <td colspan="3"><img src="/cms/images/obsessed_neues.png" width="210" height="20"></td>
            </tr>
          <tr>
            <td width="10">&nbsp;</td>
            <td width="190">CMS_CONTAINER[2]</td>
            <td width="10"><img src="/cms/images/obsessed_neues_rd.png" width="10" height="80"></td>
          </tr>
          <tr>
            <td colspan="3"><img src="/cms/images/obsessed_links.png" width="210" height="20"></td>
            </tr>
          <tr>
            <td width="10"><img src="/cms/images/obsessed_links_rd.png" width="10" height="120"></td>
            <td width="190">CMS_CONTAINER[3]</td>
            <td width="10">&nbsp;</td>
          </tr>
        </table></td>
        <td align="left" valign="top" background="/cms/images/cnt_hg.png"><table width="490" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td width="20">&nbsp;</td>
            <td width="470">
            <h1>CMS_CONTAINER[4]</h1>
            <P>&nbsp;</P>
            CMS_CONTAINER[5]
            CMS_CONTAINER[6]
            CMS_CONTAINER[7]
            CMS_CONTAINER[8]
            CMS_CONTAINER[9]
            </td>
          </tr>
        </table></td>
        <td background="/cms/images/wb.png">&nbsp;</td>
      </tr>
      <tr>
        <td background="/cms/images/wb.png">&nbsp;</td>
        <td align="left" valign="top"><img src="/cms/images/serv_u.png" width="210" height="30"></td>
        <td align="left" valign="top"><img src="/cms/images/cnt_u.png" width="510" height="30"></td>
        <td background="/cms/images/wb.png">&nbsp;</td>
      </tr>
    </table></td>
  </tr>
  <tr>
    <td><img src="/cms/images/fl_1.png" width="740" height="10"></td>
  </tr>
  <tr>
    <td><table width="740" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="10"><img src="/cms/images/f_l.png" width="10" height="40"></td>
        <td width="170"><img src="/cms/images/f.png" width="170" height="40"></td>
        <td width="560"><img src="/cms/images/f_r.png" width="560" height="40"></td>
      </tr>
    </table></td>
  </tr>
  <tr>
    <td><img src="/cms/images/fl_2.png" width="740" height="10"></td>
  </tr>
</table>
</body>
</html>
Weiter funktioniert das von Macromedia Dreamweaver generierte JavaScript für OnmouseOver Buttons nach einem editieren nicht mehr. Das heisst es funktionirt wenn man das ganze Layout frisch ins Eingabeformular kopiert, nicht aber, wenn man es später wieder dort drinn editieren will.
Lösung: Die JavaScripts in eine externe Datei auslagern.
Gesperrt