Onepage_XH: (s)doc(s)

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Onepage_XH: (s)doc(s)

Post by frase » Thu May 23, 2019 3:43 pm

Interessante Beobachtung:
Heute Update Firefox auf Version 67.0 (64) -> die Darstellung der diagonalen Linien (Hintergründe) ist ein Graus!
(ist im FF for Android übrigens ebenso)
Na ja, diese Linien waren für mich sowieso nie schön, da mach' ich mal irgendwann was anderes.

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Onepage_XH: (s)doc(s)

Post by frase » Mon May 27, 2019 1:11 pm

Da ich am Sonnabend total vergessen habe, euch auf den "Towel Day" (Tag des Handtuchs) hinzuweisen, stelle ich heute mal eine Frage an Holger.

@Holger
Bin im Moment ziemlich begeistert von deiner Onepage-Version inklusive der Example-JS.
Ich frage mich allerdings, wie das nochmal war mit <article> und/oder <section> für die einzelnen Seiten :?:

Code: Select all

<?php $onepage_structure = '
<article id="%s" class="onepage_page">
    <div class="container">%s</div>
</article>
';?>
<main>
    <?php echo onepage_content()?>
</main>
Solche Konstruktionen funktionieren wohl nicht mehr - oder?

Holger
Site Admin
Posts: 3470
Joined: Mon May 19, 2008 7:10 pm
Location: Hessen, Germany

Re: Onepage_XH: (s)doc(s)

Post by Holger » Mon May 27, 2019 9:24 pm

frase wrote:
Mon May 27, 2019 1:11 pm
Ich frage mich allerdings, wie das nochmal war mit <article> und/oder <section> für die einzelnen Seiten :?:
Na ja, das mit der globalen Variable war eh Murks und daher kein Wunder, dass Christoph das diplomatisch unkommentiert gelassen hat.

Aber eigene Strukturen sind nach wie vor möglich. Der "richtige" Weg wäre eine eigene, den Wünschen entsprechend angepasste Methode für getContent(). Du solltest dabei aber beachten, dass eigentlich per Definition (bzw. Einigung im Thread damals) ein Div mit der Id "Seitenname" Voraussetzung zur Funktion der JavaScripte ist und deshalb zwingend am richtigen Platz enthalten sein sollte. Änderst du das <div> zu einem anderen Tag, könnte das Kompatibilitätsprobleme verursachen. Natürlich kannst du aber, wenn Du ein eigenes JS per Template auslieferst, an der Stelle entsprechend eingreifen.

Anbei mal ein kleines Beispiel als Basis für eigene Versuche (sollte ich vielleicht auch zu /examples auf GitHub kopieren?):

Code: Select all

<?php

class TPLNameController extends Onepage_Controller
{
    /**
     * @return string
     */
    public function tplNamegetContent()
    {
        global $s, $o, $hc, $c, $u, $edit, $plugin_cf, $pd_router;

        if (!($edit && XH_ADM) && $s > -1) {
            $contents = '';
            foreach ($hc as $i) {
                if ($plugin_cf['onepage']['url_numeric']) {
                    $url = $i;
                } else {
                    $url = Onepage\Urlify::makeUniqueUrl($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(
                        '<article><div class="%s">%s</div></article>',
                        $plugin_cf['onepage']['inner_class'],
                        $content
                    )
                );
            }
            $o .= preg_replace('/#CMSimple (.*?)#/is', '', $contents);
        }
        return preg_replace('/<!--XH_ml[1-9]:.*?-->/is', '', $o);
    }
}

// Funktion zur Ausgabe im Template
function TplName_content()
{
    $t = new TPLNameController();
    return $t->tplNamegetContent();
}
Du erstellst also eine eigene Klasse "TPLNameController", die den Onepage_Controller erweitert.
Die einzige neue Methode darin ist tplNamegetContent(), in der wir die angepasste Struktur definieren. Es ist eine Kopie der getContent() - Methode aus der originalen Onepage\Controller - Klasse (/plugins/onepage/classes/Controller.php). Hier im Beispiel ist an der entsprechenden Stelle nur ein <article> ... </article> eingebaut. Du kannst so aber beliebige Strukturen realisieren.

Die Funktion außerhalb der Klasse dient dann zur Ausgabe der Inhalte im Template. Dort also echo onepage_content() mit echo TplName_content() ersetzen.

Den ganzen Code packst du dann zum Beispiel in eine Datei "tplfunctions.php" die du per include() oder require() am Anfang der template.htm einbindest. Das war's :), bis auf TplName in obigem Code noch entsprechend mit einem eindeutigen Bezeichner ersetzen.
Auf diese Art kannst du ohne Eingriffe in den Plugin-Code, allein über das Template, die gewünschte Ausgabe-Struktur erzeugen.

Ein kleiner Fallstrick ist/war aber enthalten. Die neue Klasse zur Bereinigung der Ids wird nicht mehr gefunden.
Der statische Aufruf im Original

Code: Select all

$url = Urlify::makeUniqueUrl($i);
muss erweitert werden, da die Urlify-Klasse im Namensraum des Onepage-Plugins definiert wurde (zu dem unsere neue Klasse nicht gehört):

Code: Select all

$url = Onepage\Urlify::makeUniqueUrl($i);
Im Code oben ist das bereits berücksichtigt. Aber vielleicht sollte das im Onepage-Plugin noch geändert werden.

Nun bin ich mal gespannt, was du daraus bastelst ;-).

Holger
Site Admin
Posts: 3470
Joined: Mon May 19, 2008 7:10 pm
Location: Hessen, Germany

Re: Onepage_XH: (s)doc(s)

Post by Holger » Tue May 28, 2019 6:10 am

Holger wrote:
Mon May 27, 2019 9:24 pm
dass eigentlich per Definition (bzw. Einigung im Thread damals) ein Div mit der Id "Seitenname" Voraussetzung zur Funktion der JavaScripte ist und deshalb zwingend am richtigen Platz enthalten sein sollte.
Korrektur, aus dem alten Thread:
Dieser <div> - Container, mit der Seiten-ID und der Klasse "onepage_page" ist Mindestvoraussetzung für die Funktion des Plugins.
Aber, wie schon gesagt, könnte es bei veränderter Struktur, bzw. einem anderen Blockelement als "div", Probleme geben. Mit einer eigenen onepage.js, die mit dem Template kommt, wäre das im Zweifelsfall zu berichtigen.

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Onepage_XH: (s)doc(s)

Post by frase » Tue May 28, 2019 6:35 am

Holger wrote:
Mon May 27, 2019 9:24 pm
Nun bin ich mal gespannt, was du daraus bastelst ;-).
Uff, schwerer Tobak am frühen Morgen.
Bin auch gespannt, denn ich handle ja eher so wie hier zitiert.
Ich melde mich dann später.
Vielen Dank!

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Onepage_XH: (s)doc(s)

Post by frase » Tue May 28, 2019 8:51 am

Na, sooo schwerer Tobak war's gar nicht ;-)
Dank Holgers guter Erklärung: simple!
Es funktioniert. Jetzt sind meine Seitenbereiche <article>s.
Grooßen Dank!

Meine tplfunctions.php sieht so aus:

Code: Select all

<?php

class fhsCCRController extends Onepage_Controller {
	
	/**
	* @return string
	*/
	public function fhsCCRgetContent() {
		global $s, $o, $hc, $c, $u, $edit, $plugin_cf, $pd_router;

		if (!($edit && XH_ADM) && $s > -1) {
			$contents = '';
			foreach ($hc as $i) {
				if ($plugin_cf['onepage']['url_numeric']) {
					$url = $i;
				} else {
					$url = Onepage\Urlify::makeUniqueUrl($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('
<article>
<div class="%s">%s</div>
</article>
',
						$plugin_cf['onepage']['inner_class'],
						$content
					)
				);
			}
			$o .= preg_replace('/#CMSimple (.*?)#/is', '', $contents);
		}
		return preg_replace('/<!--XH_ml[1-9]:.*?-->/is', '', $o);
	}
}

// Funktion zur Ausgabe im Template
function fhsCCR_content() {
	$t = new fhsCCRController();
	return $t->fhsCCRgetContent();
}
Die eigenartigen Einrückungen habe ich gemacht, damit die Ansicht des Seitenquelltextes etwas übersichtlicher wird. (Was bei Verwendung von CNC dann wieder zerstört wird -> nicht so wichtig.)

Wer es sehen will: bitte hier.
Der Download ist veraltet. Es wird in den nächsten Tagen wohl einen aktuelleren geben.

Ich muss mir noch überlegen, ob ich die Warnungen des Nu Html Checkers wegen der Verwendung der h1-Überschriften ignoriere - oder nicht. (Übrigens: jQuery mit "<script type="text/javascript" ..." wird auch angewarnt.)

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Onepage_XH: (s)doc(s)

Post by frase » Tue May 28, 2019 12:24 pm

frase wrote:
Tue May 28, 2019 8:51 am
Ich muss mir noch überlegen, ob ich die Warnungen des Nu Html Checkers wegen der Verwendung der h1-Überschriften ignoriere - oder nicht.
Das habe ich mir jetzt überlegt.
Ab sofort beginnen meine Einzel-Seiten alle mit einer h2-Überschrift (im Header ist eine h1).
Die Screenreader zeigen nun korrekterweise alle Überschriften an - das ist also besser.

Holger
Site Admin
Posts: 3470
Joined: Mon May 19, 2008 7:10 pm
Location: Hessen, Germany

Re: Onepage_XH: (s)doc(s)

Post by Holger » Wed May 29, 2019 6:03 am

frase wrote:
Tue May 28, 2019 8:51 am
Na, sooo schwerer Tobak war's gar nicht ;-)
Schön :) .
frase wrote:
Tue May 28, 2019 8:51 am
Wer es sehen will: bitte hier.
Schaut gut aus. Bin gespannt auf den nächsten Download!

Nur, wie geht's jetzt weiter?
Zwei kleine Dinge müssten in OnePage_XH übernommen werden:
- bereinigte und eindeutigeIDs
- Hashes auch im Admin-Mode

Soweit ich das überblicke, sollten diese Änderungen keine Auswirkungen auf die Pluginfunktion haben und das mitgelieferte JS sollte auch noch funktionieren.
Lediglich Deep-Links in/zu bestehenden Installationen würden sich ändern, was ein BC-Break wäre. Eventuell könnte man die Bereinigung der IDs auch optional machen.
BTW: wenn man sich solche Urlverschönerer anschaut, wandeln sie in der Regel alles in Kleinbuchstaben. Vielleicht sollten wir das auch so machen.

Aber eigentlich wollte ich noch eine Möglichkeit für "Multi-OnePagers", in etwa so:
alle Seiten unterhalb einer Level-1 Seite werden als OnePager dargestellt. Man kann natürlich mehrere solche Seiten in einer Installation haben. Also so ähnlich wie Gerts "ml2-OnePagers".
Aber welches Menü, bzw. welche Menüarten wären da sinnvoll?

Ach ja, nach fhs_adminmenu wollte ich ja (für das jQuery-Beispiel) auch noch einmal schauen...

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Onepage_XH: (s)doc(s)

Post by frase » Wed May 29, 2019 6:40 am

Holger wrote:
Wed May 29, 2019 6:03 am
Schaut gut aus. Bin gespannt auf den nächsten Download!
Na ja, das Grundlayout ist eben etwas "retro" - und da mich das selbst nicht so richtig umgehauen hat, habe ich einige Gimmicks, Gadgets oder wie das heißt eingebaut.
Neuer Download kommt bald.
Übrigens: Um einen neuen Download fertigzustellen, wollte ich heute den Content mit Exchange in eine Original-XH-Installation übertragen. Ich erhielt zwar den Content, aber alle Seiten doppelt! Aus Zeitgründen habe ich Exchange gekillt und es nicht weiter untersucht.
Ich beabsichtige nun wirklich das Template inkl. einer kompletten XH-Umgebung zum Download anzubieten, einfach weil es mit dem assets-Ordner im Admin-Modus übersichtlicher ist. Auch dem Tiny habe ich eine eigene init verpasst. Und der neue Filebrowser ist auch dabei (der ist schon Monate fertig - wir haben eine gute XH-Stabilität erreicht und mit Stabilität meine ich Stillstand [Satire]).
Holger wrote:
Wed May 29, 2019 6:03 am
Zwei kleine Dinge müssten in OnePage_XH übernommen werden:
- bereinigte und eindeutigeIDs
- Hashes auch im Admin-Mode
+1
Holger wrote:
Wed May 29, 2019 6:03 am
Lediglich Deep-Links in/zu bestehenden Installationen würden sich ändern, was ein BC-Break wäre.
Na ja, bei einem Onepager vielleicht nicht so tragisch - oder?
Holger wrote:
Wed May 29, 2019 6:03 am
BTW: wenn man sich solche Urlverschönerer anschaut, wandeln sie in der Regel alles in Kleinbuchstaben. Vielleicht sollten wir das auch so machen.
Unbedingt.
"#id0_Ueber-das-Template" - dabei muss man zum Eintippen schon zweimal die Hochstelltaste drücken ;-)
Holger wrote:
Wed May 29, 2019 6:03 am
Aber eigentlich wollte ich noch eine Möglichkeit für "Multi-OnePagers", in etwa so: ...
Hier könnte Ludwig Unterstützung leisten, er hat sich wohl schon ausgiebig mit dem Thema beschäftigt.
Holger wrote:
Wed May 29, 2019 6:03 am
Ach ja, nach fhs_adminmenu wollte ich ja (für das jQuery-Beispiel) auch noch einmal schauen...
Nicht zwingend nötig. Habe es dokumentiert. Schön wäre vielleicht eine Meldung, falls es jemand aktiv hat.

Letztendlich weiß ich auch nicht so recht, wie das mit dem Plugin weitergeht. Was sage ich den Benutzern des Templates, was Updates angeht? (version.nfo?)

NACHTRAG:
Das zitterige Scrollen (manchmal) scheint mir gar nicht von den Animationen oder dem Owl-Carousel zu kommen, sondern eher vom "Post It". Das muss noch untersucht werden.

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Onepage_XH: (s)doc(s)

Post by frase » Wed May 29, 2019 7:00 am

Ach, übrigens:
Ich habe in der tplfunctions.php noch eine Verkürzung vorgenommen (noch nicht online).
Statt:

Code: Select all

<article>
<div class="%s">%s</div>
</article>
schreibe ich jetzt nur noch:

Code: Select all

<article class="%s">%s</article>
Das spart einen <div> und es scheint bei mir sauber zu funktionieren.

Korrektur wegen Voreiligkeit:
Funktioniert nicht!

Post Reply