Code - Fragen

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
lck
Posts: 1695
Joined: Wed Mar 23, 2011 11:43 am
Contact:

Re: Code - Fragen

Post by lck » Mon Aug 26, 2019 10:22 am

cmb wrote:
Sat Aug 24, 2019 5:58 pm
Wenn die Anpassung in template.htm erfolgen soll, dann müsste man ein alternatives Onepage_content() zur Verfügung stellen. Die eigentliche Implementierung ist kein Hexenwerk, so dass man das mit Copy&Paste und ein bisschen Anpassung machen könnte.
Na ja, relativ gesehen. Ich werd's mal versuchen.
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

lck
Posts: 1695
Joined: Wed Mar 23, 2011 11:43 am
Contact:

Re: Code - Fragen

Post by lck » Fri Aug 30, 2019 11:36 am

lck wrote:
Mon Aug 26, 2019 10:22 am
Ich werd's mal versuchen.
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>',
Sollte geändert werden zu

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

cmb
Posts: 13272
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: Code - Fragen

Post by cmb » Sat Aug 31, 2019 7:40 am

Was ich im Sinn hatte war etwa folgende content.php im Template-Ordner:

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;
        }
    }
}
Diese Datei wird dann in template.htm eingebunden:

Code: Select all

<?php
require_once "{$pth['folder']['template']}content.php";
?>
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:

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);
}
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

$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

lck
Posts: 1695
Joined: Wed Mar 23, 2011 11:43 am
Contact:

Re: Code - Fragen

Post by lck » Sat Aug 31, 2019 10:13 am

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 :? .
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

cmb
Posts: 13272
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: Code - Fragen

Post by cmb » Sat Aug 31, 2019 11:40 am

lck wrote:
Sat Aug 31, 2019 10:13 am
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 :? .
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="">
Auch wenn Browser damit kein Problem haben sollten, ist es halt nicht schön.

Version 2 wäre so gesehen zu bevorzugen.
Christoph M. Becker – Plugins for CMSimple_XH

Post Reply