Clean URLs
Re: Clean URLs
Das Problem ist doch noch ganz anders : Will ich Bootstrap (o.ä.) benutzen, so muss eine UL mit Menülevel 1 die Klasse 'dropdown-menu' bekommen - genau wie Verzweigungslinks(Einige Anker evtl. auch). Andere Templates wollen andere Klassen-Namen.
Ich kann aber beim UL nur den Inhalt hinzufügen und keinen Klassennamen (wer hier eine Lösung hat ist willkommen). Mit Jquery-add und php-Script kann man hier ein wenig nachhelfen. Jede Seite kann ein anderes Standardtemplate haben (im Extremfall) unabhängig von einem Themeswitcher. Dazu hilft eine Variable 'aktuelles Template'.
Habe ich mehrere Templates, so kommen sich die Styles in die Quere. Daher mein Vorschlag : Ein Textfeld statt einer Zeile und eine Auswertung per php mit if then o.ä.(habe ich schon anderweitig gesehen, e107 zb.)
Templatename1: Klasse 1 , Klasse 2, Klasse 3 , Klasse 4....;
Templatename2: Klasse 1 , Klasse 2, Klasse 3 , Klasse 4....;
.....
Man könnte dann eine styles.php zu jedem Template hinzufügen und diese auswerten und/oder eine template.php im System.
Ich möchte dazu nur noch eins bemerken. Es gibt auch Cmsse wie Typesetter, die nur ein CSS benötigen ohne all das - warum nicht auch ein künftiges Cmsimple.
Zum Stylen eine Interessante Quelle : https://github.com/pear/HTML_CSS
Ich kann aber beim UL nur den Inhalt hinzufügen und keinen Klassennamen (wer hier eine Lösung hat ist willkommen). Mit Jquery-add und php-Script kann man hier ein wenig nachhelfen. Jede Seite kann ein anderes Standardtemplate haben (im Extremfall) unabhängig von einem Themeswitcher. Dazu hilft eine Variable 'aktuelles Template'.
Habe ich mehrere Templates, so kommen sich die Styles in die Quere. Daher mein Vorschlag : Ein Textfeld statt einer Zeile und eine Auswertung per php mit if then o.ä.(habe ich schon anderweitig gesehen, e107 zb.)
Templatename1: Klasse 1 , Klasse 2, Klasse 3 , Klasse 4....;
Templatename2: Klasse 1 , Klasse 2, Klasse 3 , Klasse 4....;
.....
Man könnte dann eine styles.php zu jedem Template hinzufügen und diese auswerten und/oder eine template.php im System.
Ich möchte dazu nur noch eins bemerken. Es gibt auch Cmsse wie Typesetter, die nur ein CSS benötigen ohne all das - warum nicht auch ein künftiges Cmsimple.
Zum Stylen eine Interessante Quelle : https://github.com/pear/HTML_CSS
Re: Clean URLs
Ich suche eine Methode, um mit preg-replace oder mit str_replace eine Klasse in einem ul oder li nur für das momentane Template zu ändern
echo preg_replace($suchmuster, $ersetzung, $zeichenkette); oder mit
string str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
also : <ul class=klasse1> nach <ul class= klasse2> ändern etc.
Eine Methode ist DomDocumentObjekt. Nur wie binde ich das in das System ein : str_replace(" docs ", " doc111 ", $text);
Übrigens geht "php auch in Javascript" : https://github.com/kvz/locutus (http://locutus.io)
P.S. .... Die Lösung geht wohl über Cmsimple-Script wie auf http://www.w3nord.de/cmsimple/?CMSimple_Hilfe:Tricks erläutert (# CMSimple $output=preg_replace(...). #
So kann man in Toxic eine Klasse definieren und sie dann in allen Templates verschieden ersetzen. Dies Ersetzung liesse sich als als styles.php ins Template einbinden.
echo preg_replace($suchmuster, $ersetzung, $zeichenkette); oder mit
string str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
also : <ul class=klasse1> nach <ul class= klasse2> ändern etc.
Eine Methode ist DomDocumentObjekt. Nur wie binde ich das in das System ein : str_replace(" docs ", " doc111 ", $text);
Übrigens geht "php auch in Javascript" : https://github.com/kvz/locutus (http://locutus.io)
P.S. .... Die Lösung geht wohl über Cmsimple-Script wie auf http://www.w3nord.de/cmsimple/?CMSimple_Hilfe:Tricks erläutert (# CMSimple $output=preg_replace(...). #
So kann man in Toxic eine Klasse definieren und sie dann in allen Templates verschieden ersetzen. Dies Ersetzung liesse sich als als styles.php ins Template einbinden.
Re: Clean URLs
Süß.cmss wrote:Übrigens geht "php auch in Javascript" : https://github.com/kvz/locutus (http://locutus.io)
Warum nicht einfach die definierte Klasse in allen Templates passend stylen?cmss wrote:So kann man in Toxic eine Klasse definieren und sie dann in allen Templates verschieden ersetzen.
Christoph M. Becker – Plugins for CMSimple_XH
Re: Clean URLs
Ah – verstehe. Wenn sowieso Bootstrap im Einsatz ist, dann kann man wohl JavaScript beim Besucher voraussetzen, und das Problem auch damit lösen. Man kann dann z.B. per Toxic_XH die Klasse meine_klasse vergeben, und diese dann in dropdown-menu wandeln:cmss wrote:Das Problem ist doch noch ganz anders : Will ich Bootstrap (o.ä.) benutzen, so muss eine UL mit Menülevel 1 die Klasse 'dropdown-menu' bekommen - genau wie Verzweigungslinks(Einige Anker evtl. auch). Andere Templates wollen andere Klassen-Namen.
Code: Select all
<script>
jQuery(function ($) {
$(".meine_klasse").removeClass("meine_klasse").addClass("dropdown-menu");
});
</script>
Christoph M. Becker – Plugins for CMSimple_XH
Re: Clean URLs
*Mit jquery addclass-removeclass geht es natürlich - man müsste dazu eine Tabelle mit den Ersetzungen entwerfen.
Dazu auch https://github.com/alexanderkx/xDomClass
Für mehrere Klassen : https://github.com/SeanJM/jquery.removeClass
* Eine weitere Möglichkeit wäre in menu.php (oder sonstwo) die Funktion setClassname (i) hinzuzufügen.
s.a. http://stackoverflow.com/questions/2108 ... m-html-tag
* Ich werde aber auch erst einmal mit #Cmsimple ... und styles.php versuchen
Dazu auch https://github.com/alexanderkx/xDomClass
Für mehrere Klassen : https://github.com/SeanJM/jquery.removeClass
* Eine weitere Möglichkeit wäre in menu.php (oder sonstwo) die Funktion setClassname (i) hinzuzufügen.
s.a. http://stackoverflow.com/questions/2108 ... m-html-tag
* Ich werde aber auch erst einmal mit #Cmsimple ... und styles.php versuchen
Re: Clean URLs
Ja, genau, zumindest wenn unterschiedliche Ersetzungen nötig sind.cmss wrote:*Mit jquery addclass-removeclass geht es natürlich - man müsste dazu eine Tabelle mit den Ersetzungen entwerfen.
Eine solche Funktion ist überflüssig, weil man ja auch gleich die gewünschte Klasse ausgeben könnte.cmss wrote:* Eine weitere Möglichkeit wäre in menu.php (oder sonstwo) die Funktion setClassname (i) hinzuzufügen.
Das geht nicht, weil $output nur das HTML des Inhaltsbereiches enthält, nicht aber dasjenige des Menüs. Ab XH 1.7 wird es möglicherweise einen "final-clean-up" Hook geben, der dann genutzt werden könnte. Aber selbst wenn dieser zur Verfügung stünde, ist eine JavaScript-Lösung einfacher oder zumindest kürzer, und diese könnte ja direkt im Template eingebunden werden, so dass eine Ersetzungstabelle eventuell gar nicht mehr nötig ist.cmss wrote:Ich werde aber auch erst einmal mit #Cmsimple ... und styles.php versuchen
Christoph M. Becker – Plugins for CMSimple_XH
Re: Clean URLs
Im Augenblick bin ich etwas ratlos. Obiges : <script>
jQuery(function ($) { $(".meine_klasse").removeClass("meine_klasse").addClass("dropdown-menu");
}); </script>
unten vor dem body hat keine Wirkung und auch nicht so etwas wie
$( "ul" ).addClass(function( index, currentClass ) {
var addedClass;
if ( currentClass === "red" ) {
addedClass = "green";
nach https://api.jquery.com/addclass/
ich werde mal nach https://www.w3schools.com/jquery/tryit. ... m_addclass weiterversuchen....
jQuery(function ($) { $(".meine_klasse").removeClass("meine_klasse").addClass("dropdown-menu");
}); </script>
unten vor dem body hat keine Wirkung und auch nicht so etwas wie
$( "ul" ).addClass(function( index, currentClass ) {
var addedClass;
if ( currentClass === "red" ) {
addedClass = "green";
nach https://api.jquery.com/addclass/
ich werde mal nach https://www.w3schools.com/jquery/tryit. ... m_addclass weiterversuchen....
Re: Clean URLs
Hm, hat es wirklich keine Wirkung, oder nur keine sichtbare? Sprich, wenn es irgendwo im erzeugten HTML-Quelltext ein Element mit der Klasse meine_klasse gibt, wird diese dann im DOM (Kontextmenü → Element untersuchen) nicht durch die Klasse dropdown-menu ersetzt?cmss wrote:Obiges : <script>
jQuery(function ($) { $(".meine_klasse").removeClass("meine_klasse").addClass("dropdown-menu");
}); </script>
unten vor dem body hat keine Wirkung […]
Das müsste einen JavaScript-Fehler erzeugen, da das Script "mitten drin" einfach aufhört.cmss wrote:$( "ul" ).addClass(function( index, currentClass ) {
var addedClass;
if ( currentClass === "red" ) {
addedClass = "green";
Christoph M. Becker – Plugins for CMSimple_XH
Re: Clean URLs
Der Code endet natürlich mit
} return addedClass; });
Allerdings hat obiges <script> jQuery(function ($) { $(".meine_klasse").removeClass("meine_klasse").addClass("dropdown-menu"); }); </script> keine Wirkung (Seitenquelltext im Firefox) - jquery ist an - mein Templateswitcher läuft auch!
$( "ul.menulevel1" ).addClass( "dropdown1" ).removeClass( "menulevel1" ); bzw.
$('div.nav ul:first').addClass('dropdown-menu'); -
als Beispiele - gehen mit Webdeveloper : Quelltext--->erzeugten Quelltext.. (s.u.) - nachprüfbar
------------------------------------
Es gibt natürlich immer noch eine Möglichkeit Bootstrap umzusetzen : Man kann im Style.css die menulevelx-Klassen in allen Einzelheiten so nachstylen wie die Dropdown-menu-Klasse im bootstrap-css und evtl. zusätzliche Klassen in Reihe dahinter.
Man kann dann allerdings das Toxic nur einmal einsetzen - es gibt da mehrere bootstrap-Menüarten(bootsnip.com!)
Schön wäre auch ein oben erwähnter Hook zum Zugriff per php - auch als Patch für 1.69 und auch die Möglichkeit ein smartmenu mit smart-jquery und ein material-css einsetzen zu können. Das macht das System für viele User sehr viel attraktiver. Wie gesagt kann z.B. Typesetter das automatisch - es benötigt nur ein (s)css und fügt die Klassen automatisch ein - andere Systeme haben ein menu.php o.ä. im Template. Es gibt da viele Wege und man braucht auch die Zeit dafür.
} return addedClass; });
Allerdings hat obiges <script> jQuery(function ($) { $(".meine_klasse").removeClass("meine_klasse").addClass("dropdown-menu"); }); </script> keine Wirkung (Seitenquelltext im Firefox) - jquery ist an - mein Templateswitcher läuft auch!
$( "ul.menulevel1" ).addClass( "dropdown1" ).removeClass( "menulevel1" ); bzw.
$('div.nav ul:first').addClass('dropdown-menu'); -
als Beispiele - gehen mit Webdeveloper : Quelltext--->erzeugten Quelltext.. (s.u.) - nachprüfbar
------------------------------------
Es gibt natürlich immer noch eine Möglichkeit Bootstrap umzusetzen : Man kann im Style.css die menulevelx-Klassen in allen Einzelheiten so nachstylen wie die Dropdown-menu-Klasse im bootstrap-css und evtl. zusätzliche Klassen in Reihe dahinter.
Man kann dann allerdings das Toxic nur einmal einsetzen - es gibt da mehrere bootstrap-Menüarten(bootsnip.com!)
Schön wäre auch ein oben erwähnter Hook zum Zugriff per php - auch als Patch für 1.69 und auch die Möglichkeit ein smartmenu mit smart-jquery und ein material-css einsetzen zu können. Das macht das System für viele User sehr viel attraktiver. Wie gesagt kann z.B. Typesetter das automatisch - es benötigt nur ein (s)css und fügt die Klassen automatisch ein - andere Systeme haben ein menu.php o.ä. im Template. Es gibt da viele Wege und man braucht auch die Zeit dafür.
Last edited by cmss on Sun Apr 16, 2017 6:03 pm, edited 2 times in total.
Re: Clean URLs
Der Seitenquelltext ist das von PHP generierte HTML, und kann nicht durch JavaScript manipuliert werden. Änderungen kann man nur im DOM-Fenster der Entwicklerkonsole des Browsers sehen.cmss wrote:Allerdings hat obiges <script> jQuery(function ($) { $(".meine_klasse").removeClass("meine_klasse").addClass("dropdown-menu"); }); </script> keine Wirkung (Seitenquelltext im Firefox) - jquery ist an - mein Templateswitcher läuft auch!
Das ist natürlich auch bei CMSimple_XH möglich, und einige Templates machen das auch so. Seit CMSimple_XH 1.6.3 kann ein eigenes Menü unter Umständen sehr einfach implementiert werden; ich habe mal gezeigt wie ein der üblichen Varianten von xtoc (einem älteren, eigenständigen Menüsystem) nun mit wenigen Zeile Code implementiert werden kann. Für Deinen Zweck könnte in etwa folgendes genutzt werden:cmss wrote:[…] andere Systeme haben ein menu.php o.ä. im Template.
Code: Select all
<?php
require_once $pth['folder']['classes'] . 'Menu.php';
class MyLi extends XH_Li
{
function renderULStartTags($i)
{
global $l;
$lines = array();
for ($k = $this->getMenuLevel($i - 1); $k < $this->getMenuLevel($i); $k++) {
$lines[] = "\n" . '<ul class="' . $this->st . ($k + 1) . ' dropdown-menu">' . "\n"; // set class here
}
return implode('<li>' . "\n", $lines);
}
}
function cmss_menu($start = null, $end = null)
{
return toc($start, $end, array(new MyLi, 'render'));
}
?>
Christoph M. Becker – Plugins for CMSimple_XH