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? :roll:

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? :roll:
das schafft ihr schon, ihr seid doch alle Profis... 8)

Gruß aus Franken

Ortwin

Re: Modulanfrage

Verfasst: Do 1. Aug 2019, 14:23
von farina
Nö leider nicht :cry:

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 '&nbsp<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... :wink:

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

Code: Alles auswählen

echo "<body class="Variable-aus-Input">";
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! :shock:

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

Code: Alles auswählen

    echo  $aCssClassNames["CMS_VALUE[1]"];
in

Code: Alles auswählen

    $myClass = $aCssClassNames["CMS_VALUE[1]"];
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. :roll:

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. :cry: