frase wrote:Einen Wunsch hätte ich für das MultiOnepage-Plugin vielleicht noch.
Im PD-Tab kann man CSS-Klassen für die Einzelseiten festlegen.
Man muss diese Klassen allerdings "im Kopf haben" - was gerade bei motley-tiles manchmal recht schwierig weil viel sein kann.
Olaf hat im Swiper-Plugin ein sehr schönes Feature bei der Konfiguration eingebaut:
Konfiguration: 2. Punkt: "Pre-defined-colors".
Dort kann man eine Data-List anlegen, die dann im PD-Tab als Browser-Vorschlag bei der Eingabe erscheint. So etwas wäre im MultiOnepage-Plugin verdammt bestimmt hilfreich.
Neues "MultiOnePage" - Plugin
Re: Neues "MultiOnePage" - Plugin
Ich zitiere mal aus meinem eigenen Beitrag von hier:
Re: Neues "MultiOnePage" - Plugin
Ja, das Sniper äh Swiper Plugin . Schönes Teil, Gratulation. Bisher hab' ich aber aus Zeitgründen nur von außen geschaut.
Edit: hab's auf Github vermerkt.
Kein Problem. Nur würde ich eine automatische Lösung bevorzugen. Stichwort: Templates / Styles im acDIV's-Plugin. Ist schon eine Weile her -- du erinnerst dich vielleicht noch??? Da war so etwas schon eingebaut.frase wrote:Olaf hat im Swiper-Plugin ein sehr schönes Feature bei der Konfiguration eingebaut:
Konfiguration: 2. Punkt: "Pre-defined-colors".
Dort kann man eine Data-List anlegen, die dann im PD-Tab als Browser-Vorschlag bei der Eingabe erscheint. So etwas wäre im MultiOnepage-Plugin verdammt bestimmt hilfreich.
Edit: hab's auf Github vermerkt.
Re: Neues "MultiOnePage" - Plugin
Eigene Methode? Wie? Was?Holger wrote: ↑Mon Aug 26, 2019 6:03 amRichtig. Da gab es in der Diskussion (zum Original-Plugin) damals keine allgemeine Unterstützung, wobei die Definition per globaler Variable eh Murks war. Stattdessen kam dann die zusätzliche, per config.php benennbare, Klasse.
Geänderte Strukturen musst du somit mittels eigener Methode definieren.
Ich wünsche mir die $onepage_structure sehnlichst zurück
Ich habe nun schon zwei Fälle, die ohne das Ding einfach nicht zu realisieren sind.
Und beim Template fhs-op2 muss man auch das alte Onepage-Plugin verwenden und Holgers JS - sonst geht nix.
Wie müsste denn so eine "eigene Methode" aussehen und wohin käme die?
Re: Neues "MultiOnePage" - Plugin
Die Methode käme sinnigerweise direkt in die template.htm oder wird über include() / require() dort eingebunden. Genau so, wie auch z.B. eine geänderte Menüstruktur erzeugt wird (Stichwort: myLi();).
Wie sie aussehen muss hängt davon ab wie die Struktur aussehen soll.
Alternativ könnte man die Ausgabe auch mittels "Templates" (Views) erzeugen. Wäre vielleicht auch eine Überlegung wert....
Re: Neues "MultiOnePage" - Plugin
Damit wäre das "wo" andeutungsweise geklärt, aber nicht das "wie" und "was". (bedenke: Du hast es hier mit "mir" zu tun )
Vorläufig habe ich mir mit einer händischen Änderung in Controller.php geholfen:
Code: Select all
public static function getContent($pages) {
...
$contents .= sprintf( '
<article id="%s" class="section-fullpage %s">
<div class="section-wrapper">%s
</div>
</article>',
$url,
$pageData['multionepage_class'],
sprintf( '
<div class="%s">%s</div>',
$plugin_cf['multionepage']['inner_class'],
$content
...
Es kommt eben immer wieder vor, dass man eine etwas andere Struktur braucht.
Ich habe versucht, das Ganze (wie du früher schon einmal) mit einer Variablen "$onepage_structure" über das Template zu lösen - ging aber schief (und den Controller hätte ich dann auch ändern müssen).
Tatsächlich wäre es schön, wenn die flexible Struktur (inkl. felxibler Klassennnamen) sowohl im Onepage- als auch im Multionepage-Plugin Einzug hielten.
Warum du damals für deine Vorschläge nicht ausreichend Zustimmung bekamst, weiß ich nicht mehr. Vielleicht habe ich da gepennt (oder hab's nicht verstanden). - Jetzt bereue ich die mangelnde Unterstützung für dich.
---
Kleine Nebenbemerkung:
Bei euch Programmierern sieht der Code für html-Ausgaben z.B. oft so aus:
Code: Select all
sprintf(
'<div id="%s" ...
Code: Select all
sprintf( '
<div class="%s" ...
Re: Neues "MultiOnePage" - Plugin
Genau der gleichen Grund ist es, warum es in PHP so aussieht wie es aussieht.
Gruß Olaf, Plugins for CMSimple_XH
Ich habe schon lange den Verdacht, dass so viele so eifrig auf Gender, Trans und Queer machen:
Weil sie für das Fachliche ganz einfach zu doof sind.
Ich habe schon lange den Verdacht, dass so viele so eifrig auf Gender, Trans und Queer machen:
Weil sie für das Fachliche ganz einfach zu doof sind.
Re: Neues "MultiOnePage" - Plugin
Genau.
Deshalb habe ich ja auch die PHP-Einrückungen nicht verändert, sondern nur die html-Ausgabe (nach dem ' bzw. innerhalb '...' ).
Re: Neues "MultiOnePage" - Plugin
Okay, mit dem Code kann ich etwas anfangen und dir einen Lösungsvorschlag anbieten:
was du brauchst, ist eine angepasste Methode "getContent()" aus der Klasse Multionepage\Controller.
Dafür musst du die bestehende Controller-Klasse um die gewünschten Änderungen erweitern.
Du legst dazu eine neue Klasse, z.B. "TplnameController" an, die nur die geänderte Methode "getContent()" enthält.
Der Code dazu sieht so aus:
Code: Select all
<?php
class TplnameController extends Multionepage\Controller {
public static function getContent($pages) {
global $s, $o, $c, $edit, $plugin_cf, $pd_router;
if (!($edit && XH_ADM) && $s > -1) {
$contents = '';
foreach ($pages as $i) {
if ($plugin_cf['multionepage']['url_numeric']) {
$url = $i;
} else {
$url = Multionepage\Urlify::makeUniqueUrl($i);
}
$pageData = $pd_router->find_page($i);
$content = self::replaceAlternativeHeading($c[$i], $pageData);
if (XH_ADM && !$edit) {
$content = self::renderEditlink($i) . $content;
}
$contents .= sprintf('
<article id="%s" class="section-fullpage %s">
<div class="section-wrapper">%s
</div>
</article>',
$url,
$pageData['multionepage_class'],
sprintf( '
<div class="%s">%s</div>',
$plugin_cf['multionepage']['inner_class'],
$content
)
);
}
$o .= preg_replace('/#CMSimple (.*?)#/is', '', $contents);
}
return preg_replace('/<!--XH_ml[1-9]:.*?-->/is', '', $o);
}
}
Das war der halbe Weg.
Um nun die neue Klasse / Methode auch zur Ausgabe zu verwenden, braucht es noch eine entsprechende Template-Funktion. Im konkreten Fall muss also ein Ersatz für die Template-Funktion "Multionepage_Content()" her.
Im Prinzip ist das auch nur eine Kopie der bestehenden Funktion. Lediglich der Aufruf von getContent() muss natürlich aus der neuen Klasse verwendet werden:
Code: Select all
function Tplname_multionepage_content() {
global $bjs, $edit, $l, $u, $s, $sn, $pd_router;
if ($s > -1 && $l[$s] > 1 && (!XH_ADM || (XH_ADM && !$edit))) {
$pageData = $pd_router->find_page($s);
if ($pageData['multionepage_access']) {
$bjs .= '<script>jQuery(".onepage_menu").hide();</script>';
return TplnameController::getContent(array($s));
}
$t = Multionepage\Controller::getRoot($s);
if (hide($t)) {
return shead(404);
} else {
$path = $sn . '?' . $u[$t];
header("Location: $path", true, 301);
exit;
}
} else {
$pages = Multionepage\Controller::getSubPages();
return TplnameController::getContent($pages);
}
}
Beide Codeblöcke kannst du direkt am Anfang des Templates einfügen, oder über eine externe Datei im Template-Ordner per include() / require() einbinden. Im Template ersetzt du dann noch <?=Multionepage_content();?> mit
<?=Tplname_multionepage_content();?>.
Bei der Namensgebung der Klasse und der Methode solltest du noch Anpassungen machen. Tplname sollte einen sinnvollen und eindeutigen Namen haben.
Solche Anpassungen per globaler Variable zu definieren ist Murks. Und ehrlich gesagt war ich überrascht, dass das überhaupt funktioniert hat (eventuell kann Christoph da Licht hinein bringen?). Jedenfalls kann die Variablen-Lösung nur genau diese Änderung an genau dieser Code-Position ermöglichen. Was aber, wenn du auch in der Menüstruktur irgendwo Änderungen brauchst? Die Lösung kann dann ja nicht eine weitere globale Variable im nächsten Plugin-Update sein.
Analog zu obigem Beispiel lassen sich die meisten Methoden des Plugins anpassen. Und natürlich lassen sich auch zusätzliche Methoden definieren. Alles über das Template. Und somit (nahezu) updatesicher.
Last edited by Holger on Tue Sep 08, 2020 1:02 pm, edited 1 time in total.
Reason: Fixed Bug in Tplname_multionepage_content()
Reason: Fixed Bug in Tplname_multionepage_content()
Re: Neues "MultiOnePage" - Plugin
Aus dem Kopf: das ist in der Tat sehr minimalistisch, und basiert auf sprintf() mit dem ein einziges %s in dem Variablenwert durch die innere Struktur ersetzt wird.
Christoph M. Becker – Plugins for CMSimple_XH
Re: Neues "MultiOnePage" - Plugin
Nicht ganz, siehe hier: http://holgerirmler.de/op_jquery/#OnePage-Container
Die "Lösung" war, hier "konkreten PHP-Code" in einer globalen Variable zu speichern. Das folgende Codeschnipsel hat wirklich so funktioniert...
Code: Select all
<?php $onepage_structure =
'<div class="onepage_page_outer">
<div id="%s" class="onepage_page container">
<div class="onepage_page_inner">
%s
</div>
</div>
</div>';
?>
Hier noch die Methode im Plugin, in der $onepage_structure verwendet wurde:
Code: Select all
public static function getContent()
{
global $s, $o, $hc, $c, $u, $edit, $plugin_cf, $onepage_structure;
if (!($edit && XH_ADM) && $s > -1) {
if (!isset($onepage_structure)) {
//Default-Struktur definieren
$onepage_structure = '<div id="%s" class="onepage_page">%s</div>';
}
$contents = '';
$oldS = $s;
foreach ($hc as $i) {
$s = $i;
$url = $plugin_cf['onepage']['url_numeric']
? $i
: XH_hsc(urldecode($u[$i]));
$contents .= sprintf(
$onepage_structure,
$url, evaluate_scripting($c[$i])
);
}
$s = $oldS;
return $o . preg_replace('/#CMSimple (.*?)#/is', '', $contents);
} else {
return $o;
}
}