Seite 2 von 3
Re: Modulanfrage
Verfasst: Do 1. Aug 2019, 14:11
von Oldperl
Servus,
bitte Nein, so nicht! Das geht alles in einem Modul. Select-Feld zur Auswahl im Editor, speichern in VAR und VALUE. Auswahl Anzeige, sprich die CSS-Klasse, je nach Auswahl in VALUE.
Gruß aus Franken
Ortwin
Re: Modulanfrage
Verfasst: Do 1. Aug 2019, 14:15
von Faar
Oldperl hat geschrieben: ↑Do 1. Aug 2019, 14:11
bitte Nein, so nicht! Das geht alles in einem Modul. Select-Feld zur Auswahl im Editor, speichern in VAR und VALUE. Auswahl Anzeige, sprich die CSS-Klasse, je nach Auswahl in VALUE.
OK, du hast ja recht, das wäre eleganter.
Wo ist das Posting des Codes?
Re: Modulanfrage
Verfasst: Do 1. Aug 2019, 14:16
von farina
wenn man in den Input des Moduls dieses schreibt
Code: Alles auswählen
?>
<form id="classes">
<select name='class1'>
<option value=''>Bitte wählen</option>
<option value='eins'>eins</option>
<option value='zwei'>zwei</option>
<option value='drei'>drei</option>
<button type="submit">Eingaben absenden</button>
</select>
</form>
<?php
Dann erhält man in der Vorlage ein Auswahlmenü, insofern das Modul nicht über die body-class eingebunden ist.
Ich müsste nun:
- den richtigen input schreiben
- den richtigen output schreiben
- das ganze der body-class zuweisen
Vielleicht geht es ja auch gar nicht.
Ich verspreche mir davon weniger Layouts, was eine umfangreiche Site übersichtlicher macht. Bei Änderungen muß man nur ein Layout ändern.
Nach der jetzigen Methode muss ich eine Layout duplizieren und mit neuer body-class versehen. Bei Änderungen an allen Layouts ändern. Und das finde ich immer sehr nervig.
Re: Modulanfrage
Verfasst: Do 1. Aug 2019, 14:18
von Oldperl
Servus,
Faar hat geschrieben: ↑Do 1. Aug 2019, 14:15
Wo ist das Posting des Codes?
das schafft ihr schon, ihr seid doch alle Profis...
Gruß aus Franken
Ortwin
Re: Modulanfrage
Verfasst: Do 1. Aug 2019, 14:23
von farina
Nö leider nicht
Re: Modulanfrage
Verfasst: Do 1. Aug 2019, 15:03
von Faar
Man kann es auf die alte Methode mit Tabellen machen oder moderner hiermit:
https://api.contenido.org/latest/class- ... ement.html
Wobei man das hier mit hinzu nehmen sollte:
https://api.contenido.org/latest/class-cHTML.html
Ich habs nicht getestet aber vielleicht funktioniert es ja:
Code: Alles auswählen
$classarray = array("rot", "gruen", "gelb");
$selectElem = new cHTMLSelectElement("CMS_VAR[0]","", "CMS_VAR[0]");
$selectElem->setClass("Klass_select");
$selectElem->appendOptionElement(new cHTMLOptionElement(i18n("Please choose"), ""));
foreach ($classarray as $option) {
if ("CMS_VALUE[0]" != $option) {
$selectElem->appendOptionElement(new cHTMLOptionElement($option, $option));
} else {
$selectElem->appendOptionElement(new cHTMLOptionElement($option, $option, true));
}
}
echo $selectElem->toHTML();
echo ' <input type="image" src="images/submit.gif">';
Re: Modulanfrage
Verfasst: Do 1. Aug 2019, 15:49
von farina
Das Script von Faar ist im im Input.
Leider ist das einzige was in den Voreinstellungen der Vorlage zu sehen ist, der anklickbare submit-Button.
Re: Modulanfrage
Verfasst: Do 1. Aug 2019, 15:51
von Faar
achje, da fehlt eine Ausgabe mit echo.
Habs oben geändert.
Wie gesagt, ich habe es nicht getestet sondern nur theoretisch zusammen gebaut.
Re: Modulanfrage
Verfasst: Do 1. Aug 2019, 16:04
von Oldperl
Servus,
ich bin dann mal so frei...
Modulname: phpBO CSS-Class-Selector
Type: content
Beschreibung:
Code: Alles auswählen
*de*
Mit diesem Modul können Sie über die Konfiguration der Vorlage einem HMTL-Tag einen CSS-Klassennamen zuweisen. Gehen Sie dafür wie folgt beispielsweise für den body-Tag wie folgt vor.
1. Im Layout im body-Tag den Class-Parameter ergänzen
2. Als Inhalt eine container-Tag erstellen und diesem dann dieses Modul zuweisen
3. In den sprachabhängigen Mandanteneinstellungen eine kommaseparierte Liste der gewünschten CSS-Klassennamen ablegen (phpbo-css-class-selector|classnames|[Liste])
4. In der Vorkonfiguration der Vorlage den gewünschten Eintrag selektieren.
Modul-Input:
Code: Alles auswählen
?><?php
/**
* description: CSS Classname Selector (Input)
*
* @package Module
* @subpackage phpBO
* @version 1.0
* @author ortwin.pinke@php-backoffice.de
* @copyright PHP-Backoffice <php-backoffice.de>
* @license http://www.gnu.de/documents/gpl-3.0.de.html
* @link http://php-backoffice.de
*/
$bDisableFlag = true;
$iSelected = 0;
$oClientLang = new cApiClientLanguage(false, cRegistry::getClientId(), cRegistry::getLanguageId());
$sCssClassNames = $oClientLang->getProperty("phpbo-css-class-selector", "classnames");
$aCssClassNames = explode(",", $sCssClassNames);
if(is_array($aCssClassNames) && count($aCssClassNames) > 0) {
$bDisableFlag = false;
$iSelected = "CMS_VALUE[1]";
}
$oCfgTable = new UI_Config_Table();
$oSelCssClass = new cHTMLInputSelectElement("CMS_VAR[1]", 1, '', $bDisableFlag);
$oOption = new cHTMLOptionElement(mi18n("-- Please Select --"), '');
$oSelCssClass->addOptionElement(0, $oOption);
foreach($aCssClassNames as $iKey => $sCssClassName) {
$oSelCssClass->appendOptionElement(new cHTMLOptionElement($sCssClassName, $iKey+1));
}
$oSelCssClass->setDefault($iSelected);
$oCfgTable->setCell('select', 0, mi18n("Select CSS Class"));
$oCfgTable->setCell('select', 1, $oSelCssClass->render()."\n ");
$oCfgTable->render(true);
?><?php
Modul-Output:
Code: Alles auswählen
<?php
/**
* description: CSS Classname Selector (Output)
*
* @package Module
* @subpackage phpBO
* @version 1.0
* @author ortwin.pinke@php-backoffice.de
* @copyright PHP-Backoffice <php-backoffice.de>
* @license http://www.gnu.de/documents/gpl-3.0.de.html
* @link http://php-backoffice.de
*/
$oClientLang = new cApiClientLanguage(false, cRegistry::getClientId(), cRegistry::getLanguageId());
$sCssClassNames = $oClientLang->getProperty("phpbo-css-class-selector", "classnames");
$aCssClassNames = explode(",", $sCssClassNames);
if(!empty($aCssClassNames[0])) {
array_unshift($aCssClassNames, "");
}
if(isset($aCssClassNames["CMS_VALUE[1]"]) && !empty($aCssClassNames["CMS_VALUE[1]"])) {
echo $aCssClassNames["CMS_VALUE[1]"];
}
?>
Gruß aus Franken
Ortwin
Re: Modulanfrage
Verfasst: Do 1. Aug 2019, 16:09
von farina
Hätte ich ja auch mal merken können.
Super das klappt. Ich kann die Klasse in den Voreinstellungen der Vorlage auswählen.
Jetzt muss ich sie "nur" noch im Output auslesen und in den body-Tag bekommen.
Da hatte ich vorhin schonmal ganz anarchisch gedacht, man ersetzt den eröffnenden body-Tag durch das Modul.
Im Output steht dann irgendwie sowas
Oh sorry. Das bezieht sich auf Faar. Hatte den Post danach noch nicht gelesen.
Re: Modulanfrage
Verfasst: Do 1. Aug 2019, 16:14
von Faar
farina hat geschrieben: ↑Do 1. Aug 2019, 16:09
Jetzt muss ich sie "nur" noch im Output auslesen und in den body-Tag bekommen.
So vielleicht:
Code: Alles auswählen
<?php
$bodytag = "CMS_VALUE[0]";
echo '<body class="'.$bodytag.'">';
?>
Re: Modulanfrage
Verfasst: Do 1. Aug 2019, 16:36
von farina
@Oldpearl:
Danke!!!! und das mal eben auf die Schnelle!
Das klappt insofern nicht, als der cms-Container nicht als Klasse akzeptiert wird. Im Quelltext steht dann genau das gleiche wie im Layout
Code: Alles auswählen
<body class='<container id="10" name="layout_css_class" types="content" mode="optional" default="layout_css_class">layout_css_class</container>'>
Re: Modulanfrage
Verfasst: Do 1. Aug 2019, 16:49
von homtata
Man kann container nicht in Hochkommas verschachteln.
Du kannst ihn einbinden, erzeugst aber in Oldperls Modul kein echo, sondern speicherst in einer Variablen ab, die du dann im Quellcode einbinden kannst.
Im Layout z.B. vor dem Bodytag oder im Header irgendwo:
Code: Alles auswählen
<container id="10" name="layout_css_class" types="content" mode="optional" default="layout_css_class">
Den Output im Modul ändern von
in
und dann im Layout den Body wie folgt unterbrechen:
<body class='<?php echo $myClass; ?>'>
Re: Modulanfrage
Verfasst: Do 1. Aug 2019, 16:59
von Oldperl
Servus,
danke @homtata, wobei der body-Tag an sich schon problematisch ist.
Alternativ kannst Du auch den Output meines Moduls ersetzen durch
Code: Alles auswählen
<?php
/**
* description: CSS Classname Selector
*
* @package Module
* @subpackage phpBO
* @version 1.1
* @author ortwin.pinke@php-backoffice.de
* @copyright PHP-Backoffice <php-backoffice.de>
* @license http://www.gnu.de/documents/gpl-3.0.de.html
* @link http://php-backoffice.de
*/
$oClientLang = new cApiClientLanguage(false, cRegistry::getClientId(), cRegistry::getLanguageId());
$sCssClassNames = $oClientLang->getProperty("phpbo-css-class-selector", "classnames");
$aCssClassNames = explode(",", $sCssClassNames);
if (!empty($aCssClassNames[0])) {
array_unshift($aCssClassNames, "");
}
if (isset($aCssClassNames["CMS_VALUE[1]"]) && !empty($aCssClassNames["CMS_VALUE[1]"])) {
echo '<body class="' . $aCssClassNames["CMS_VALUE[1]"] . '" >';
} else {
echo '<body class="empty">';
}
?>
und dann den body-Tag komplett im Layout durch
Code: Alles auswählen
<container id="6000" name="css_class" types="content" mode="fixed" default="phpBO CSS-Class-Selector">css_class</container>
ersetzen. Das funktioniert (getestet)
Gruß aus Franken
Ortwin
PS: Grundsätzlich muss man aber auch immer noch Chains im Auge behalten, die das HTML prüfen und eventuell auch nachträglich noch Änderungen machen.
Re: Modulanfrage
Verfasst: Do 1. Aug 2019, 18:15
von farina
Klappt, Danke!
Und ich habe die andere Version von Faar auch mal weiterverfolgt. Die klappt auch. Danke!
Allerdings mit einer großen Einschränkung. Im Backend wird im Editor nichts mehr angezeigt. Hier fehlt dann wahrscheinlich der body-Tag.