Na ja, relativ gesehen. Ich werd's mal versuchen.
Code - Fragen
Re: Code - Fragen
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“ Ludwig's XH-Templates for MultiPage & OnePage
Re: Code - Fragen
Versuche fehlgeschlagen, brauche Hilfe vom Profi.
Betrifft Controller.php Zeile 156 - 182:
Diesen Bereich, besser gesagt eigentlich nur eine Zeile (173), will ich per template.htm anders ausgeben.
Code: Select all
'<div class="%s">%s</div>',
Code: Select all
'<div class="%s"><input type="checkbox" class="lck_acc-toggle" checked><i class="lck_acc-toggle-icon"></i>%s</div>',
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“ Ludwig's XH-Templates for MultiPage & OnePage
Re: Code - Fragen
Was ich im Sinn hatte war etwa folgende content.php im Template-Ordner:
Diese Datei wird dann in template.htm eingebunden:
Und dann wird der Aufruf von Onepage_content() durch lck_onepage_content() ersetzt.
Das ist natürlich für die kleine Anpassung ziemlich aufwendig, und auch bezüglich möglicher Änderungen an Onepage_XH nicht gerade elegant. Vielleicht etwas besser ist ein kleiner Hack, mit dem dem das erzeugte HTML nachträglich angepasst wird. Dazu einfach nur in template.htm die Funktion definieren:
Und dann eben auch den Aufruf von Onepage_content() durch lck_onepage_content() ersetzen. content.php wird hier gar nicht benötigt.
Auch ein bisschen problematisch wegen eventueller Onepage_XH Updates. Die eigentlich beste Lösung wäre eine Anpassung von Onepage_XH, etwa dass man als Designer ein kleines Template für den Seiteninhalt vorgeben kann wie es mal von Holger vorgeschlagen wurde.
Oder halt ganz hackish, ohne Programmanpassung, einfach nur config.php anpassen:
Code: Select all
<?php
function lck_onepage_content()
{
return Lck_Onepage::getContent();
}
class Lck_Onepage
{
/**
* @return string
*/
public static function getContent()
{
global $s, $o, $hc, $c, $u, $edit, $plugin_cf, $pd_router;
if (!($edit && XH_ADM) && $s > -1) {
$contents = '';
foreach ($hc as $i) {
$url = $plugin_cf['onepage']['url_numeric']
? $i
: XH_hsc(urldecode($u[$i]));
$pageData = $pd_router->find_page($i);
$content = self::replaceAlternativeHeading($c[$i], $pageData);
$contents .= sprintf(
'<div id="%s" class="onepage_page %s">%s</div>',
$url,
$pageData['onepage_class'],
sprintf(
'<div class="%s"><input type="checkbox" class="lck_acc-toggle" checked><i class="lck_acc-toggle-icon"></i>%s</div>',
$plugin_cf['onepage']['inner_class'],
$content
)
);
}
$o .= preg_replace('/#CMSimple (.*?)#/is', '', $contents);
}
return preg_replace('/<!--XH_ml[1-9]:.*?-->/is', '', $o);
}
/**
* @param string $content
* @return string
* @todo Use Pageparams_replaceAlternativeHeading() if available.
*/
protected static function replaceAlternativeHeading($content, array $pageData)
{
global $cf;
if (isset($pageData['show_heading']) && $pageData['show_heading'] == '1') {
$pattern = '/(<h[1-' . $cf['menu']['levels'] . '].*>).+(<\/h[1-'
. $cf['menu']['levels'] . ']>)/isU';
if (trim($pageData['heading']) == '') {
return preg_replace($pattern, '', $content);
} else {
return preg_replace(
$pattern,
'${1}' . addcslashes($pageData['heading'], '$\\') . '$2',
$content
);
}
} else {
return $content;
}
}
}
Code: Select all
<?php
require_once "{$pth['folder']['template']}content.php";
?>
Das ist natürlich für die kleine Anpassung ziemlich aufwendig, und auch bezüglich möglicher Änderungen an Onepage_XH nicht gerade elegant. Vielleicht etwas besser ist ein kleiner Hack, mit dem dem das erzeugte HTML nachträglich angepasst wird. Dazu einfach nur in template.htm die Funktion definieren:
Code: Select all
function lck_onepage_content()
{
global $plugin_cf;
$content = Onepage_content();
$innerclass = $plugin_cf['onepage']['inner_class'];
return preg_replace(
"/<div class=\"($innerclass)\">/u",
'<div class="\\1"><input type="checkbox" class="lck_acc-toggle" checked><i class="lck_acc-toggle-icon"></i>',
$content);
}
Auch ein bisschen problematisch wegen eventueller Onepage_XH Updates. Die eigentlich beste Lösung wäre eine Anpassung von Onepage_XH, etwa dass man als Designer ein kleines Template für den Seiteninhalt vorgeben kann wie es mal von Holger vorgeschlagen wurde.
Oder halt ganz hackish, ohne Programmanpassung, einfach nur config.php anpassen:
Code: Select all
$plugin_cf['onepage']['inner_class']="onepage_page_inner\"><input type=\"checkbox\" class=\"lck_acc-toggle\" checked><i class=\"lck_acc-toggle-icon\"></i class=\"";
Christoph M. Becker – Plugins for CMSimple_XH
Re: Code - Fragen
Sehr schön Christoph, besten Dank!
Version 1 per content.php: Ja, das wäre für die kleine Änderung wohl zu umfangreich, aber gut zu wissen.
Version 2 per template.htm: Gefällt mir gut, genau das, was ich gesucht habe.
Version 3 per config.php: Gefällt mir noch besser. Einfach und kurz, ist halt nicht updatesicher und müsste mit ausgeliefert oder dokumentiert werden .
Version 1 per content.php: Ja, das wäre für die kleine Änderung wohl zu umfangreich, aber gut zu wissen.
Version 2 per template.htm: Gefällt mir gut, genau das, was ich gesucht habe.
Version 3 per config.php: Gefällt mir noch besser. Einfach und kurz, ist halt nicht updatesicher und müsste mit ausgeliefert oder dokumentiert werden .
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“ Ludwig's XH-Templates for MultiPage & OnePage
Re: Code - Fragen
Ja (dynamische Änderungen von $plugin_cf ist seit XH 1.7 nicht mehr möglich). Aber darüber hinaus ist es eben sehr hackish, da folgendes erzeugt wird:
Code: Select all
</i class="">
Version 2 wäre so gesehen zu bevorzugen.
Christoph M. Becker – Plugins for CMSimple_XH
Re: Code - Fragen
Gibt es in PHP auch eine wrap-Function, so wie bei jQuery?
Vorgabe: Suche erste h1 in einer Seite und umschließe den nachfolgenden content bis zum Ende (bevor einer bestimmten Klasse) mit einem div, zum Beispiel <div class="php-wrapper">...</div>.
Vorgabe: Suche erste h1 in einer Seite und umschließe den nachfolgenden content bis zum Ende (bevor einer bestimmten Klasse) mit einem div, zum Beispiel <div class="php-wrapper">...</div>.
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“ Ludwig's XH-Templates for MultiPage & OnePage
Re: Code - Fragen
preg_replace ist da so ein Ansatz. Chrstoph kennt wohl den regex pattern aus dem Stegreif.
Re: Code - Fragen
Oder DOMDocumet / DOMXPath (auch gefrickel).
Kannst Du mal ein konkretes Beispiel posten? Das mit
Bis zu einem beliebigen Element mit einer bestimmten Klasse?
Kannst Du mal ein konkretes Beispiel posten? Das mit
verstehe ich nicht wirklich....den nachfolgenden content bis zum Ende (bevor einer bestimmten Klasse)
Bis zu einem beliebigen Element mit einer bestimmten Klasse?
Re: Code - Fragen
Im Prinzip so wie hier.
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“ Ludwig's XH-Templates for MultiPage & OnePage
Re: Code - Fragen
Also immer alles von <h2> bis zum nächsten <h2> "wrappen"?
Eine einfache Funktion, wie mit jQuery, gibt es nicht in PHP. Dafür muss eine eigene Funktion erstellt werden. Die Randbedingungen müssen aber genau bekannt sein.
Das, was Du suchst, ist vermutlich so wie das Seitensplitting von XH.
Kannst Du die Sache etwas genauer beschreiben?