Kompletten Inhalt von content.htm ausgeben - OnePage

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
knollsen
Posts: 459
Joined: Wed Nov 06, 2013 2:28 pm

Re: Kompletten Inhalt von content.htm ausgeben - OnePage

Post by knollsen » Thu Jul 09, 2015 9:22 am

Wie kann ich die sitemap mit links numerisch ausgeben? So das der link so "#1" aussieht. - ich komm mit meinem script nicht weiter
Beispiel: Hab im Header

Code: Select all

<a href="?seiteninhalt"><img src="'site-icon.png"></a>
dann in der userfuncs.php

Code: Select all

if (isset($_GET['seiteninhalt'])) {
	sitemapnum();
}

function sitemapnum() {
	global $cl, $cf, $tx, $title, $o;
	$title = $tx['title']['sitemap'];
	$pages = array();
	$o .= '<h1>' . $title . '</h1>' . "\n";
	for ($i = 0; $i < $cl; $i++) {
		if (!hide($i) || $cf['show_hidden']['pages_sitemap'] == 'true') {
			$pages[] = $i;
		}
	}
	//$o .= li($pages, 'sitemaplevel'); //???
	/*Hier weis ich nicht mehr weiter*/
}
Danke

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Kompletten Inhalt von content.htm ausgeben - OnePage

Post by cmb » Thu Jul 09, 2015 1:56 pm

knollsen wrote:

Code: Select all

	//$o .= li($pages, 'sitemaplevel'); //???
	/*Hier weis ich nicht mehr weiter*/
}
Dann schau Dir mal function li() (in cmsimple/tplfuncs.php) an. Dort wird ein Exemplar von XH_Li erzeugt, und dessen ::render() Methode aufgerufen. Du willst statt dessen aber ein Exemplar von Onepage_Li haben, wozu Du sitemapnum() wie folgt ändern kannst:

Code: Select all

function sitemapnum() {
   global $cl, $cf, $tx, $title, $o, $pth;
   $title = $tx['title']['sitemap'];
   $pages = array();
   $o .= '<h1>' . $title . '</h1>' . "\n";
   for ($i = 0; $i < $cl; $i++) {
      if (!hide($i) || $cf['show_hidden']['pages_sitemap'] == 'true') {
         $pages[] = $i;
      }
   }
   include_once $pth['folder']['classes'] . 'Menu.php';
   $li = new Onepage_Li();
   $o .= $li->render($pages, 'sitemaplevel');
}
Das include_once wird übrigens nur für XH 1.6 benötigt; für XH 1.7 muss es entfallen.
Christoph M. Becker – Plugins for CMSimple_XH

knollsen
Posts: 459
Joined: Wed Nov 06, 2013 2:28 pm

Re: Kompletten Inhalt von content.htm ausgeben - OnePage

Post by knollsen » Thu Jul 09, 2015 7:46 pm

Danke hat mir schon sehr geholfen. Hab allerdings alles in die userfuncs geschrieben, weil das Plugin später geladen wird und

Code: Select all

$plugin_cf['onepage']['url_numeric']
nicht greift um numeric in der if bei der function anchor zu gewährleisten.
Das include_once wird übrigens nur für XH 1.6 benötigt; für XH 1.7 muss es entfallen.
Wie 1.7 ? Hab die 1.6.7 Arbeitest du an einem großen Update? Denn auch in der 1.6.7 wird include_once benötigt.

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Kompletten Inhalt von content.htm ausgeben - OnePage

Post by cmb » Thu Jul 09, 2015 8:23 pm

knollsen wrote:Wie 1.7 ? Hab die 1.6.7 Arbeitest du an einem großen Update? Denn auch in der 1.6.7 wird include_once benötigt.
Wir arbeiten schon seit einer Weile an XH 1.7. Mit 1.6 meinte ich schon die ganze 1.6.x Reihe.
Christoph M. Becker – Plugins for CMSimple_XH

knollsen
Posts: 459
Joined: Wed Nov 06, 2013 2:28 pm

Re: Kompletten Inhalt von content.htm ausgeben - OnePage

Post by knollsen » Thu Jul 09, 2015 10:08 pm

Ahh OK ! Aber wie soll das funktionieren, wenn include_once $pth['folder']['classes'] . 'Menu.php'; rausnehme bei 1.7 in der userfuncs.php ?
Hab aber auch was gemerkt das bei meinem href-Link auch

Code: Select all

if (!hide($i) || $cf['show_hidden']['pages_sitemap'] == 'true') {
     $pages[] = $i;
}
nicht greift.
So zeigt er alle auch versteckte Seiten an. mmm

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Kompletten Inhalt von content.htm ausgeben - OnePage

Post by cmb » Thu Jul 09, 2015 10:34 pm

knollsen wrote:Aber wie soll das funktionieren, wenn include_once $pth['folder']['classes'] . 'Menu.php'; rausnehme bei 1.7 in der userfuncs.php ?
Bei XH 1.7 ist ein Autoloader integriert, der alle verwendeten Core-Klassen (also diejenigen in cmsimple/classes/) automatisch lädt, wenn sie verwendet werden.
knollsen wrote:So zeigt er alle auch versteckte Seiten an. mmm
Hast Du vielleicht die entsprechende Konfigurationsoption (versteckte Seiten anzeigen → im Inhaltsverzeichnis) aktiviert?
Christoph M. Becker – Plugins for CMSimple_XH

knollsen
Posts: 459
Joined: Wed Nov 06, 2013 2:28 pm

Re: Kompletten Inhalt von content.htm ausgeben - OnePage

Post by knollsen » Thu Jul 09, 2015 11:00 pm

Nein habe ich nicht! Meine links werden ja so intern wie ein Anker (#3) gelegt. Bei meinem link für die Sitemap im Header kann ich das ja nicht weil das ja nichts im Content zu suchen hat. Also lad der Browser neu. Und per Get empfange ich den Aufruf und leite ihn weiter. Da userfuncs davor geladen wird, denke ich mal das eine globale Variable fehlt, denn die Anzahl der Seiten kann er ja auslesen um das Array zu bilden, aber hide scheint er nicht zu schnallen. Wenn das nicht geht muß ich das halt anders lösen, denn alle Wege führen nach Rom. (irgendwie)
Poste mal mein Script jetzt! (OnePage-Plugin habe ich entfernt aus dem Plugin Ordner)

Code: Select all

function sitemapnum() {
	global $cl, $cf, $tx, $title, $o, $pth;
	$title = $tx['title']['sitemap'];
	$pages = array();
	$o .= '<h1>' . $title . '</h1>' . "\n";
	for ($i = 0; $i < $cl; $i++) {
		if (!hide($i) || $cf['show_hidden']['pages_sitemap'] == 'true') {
			$pages[] = $i;
		}
	}
	include_once $pth['folder']['classes'] . 'Menu.php';
	class MyLiNum extends XH_Li{
		function renderMenuItem($i) {
			global $h;
			return $this->renderTag($i) . $h[$this->ta[$i]] . '</a>';
		}
		//Hier wird die Nummer gesetzt im Link
		function renderTag($i) {
			$x = $this->shallOpenInNewWindow($i) ? '" target="_blank' : '';
			return $this->anch($this->ta[$i], $x);
		}
		protected function anch($i, $x) {
			global $sn, $u, $cf, $edit, $plugin_cf;
			$html = '<a href="' . $sn;
			if (XH_ADM && !$edit) {
				$html .= '?' . $u[$i];
			}
			$html .= (XH_ADM && $edit) ? '?' : '#';
			if (isset($u[$i])) {
				$html .= $i;
			}
			$html .= $x . '">';
			return $html;
		}
		//--- ENDE ---
	}
	$li = new MyLiNum();
	$o .= $li->render($pages, 'sitemaplevel');
}

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Kompletten Inhalt von content.htm ausgeben - OnePage

Post by cmb » Thu Jul 09, 2015 11:30 pm

knollsen wrote:Da userfuncs davor geladen wird, denke ich mal das eine globale Variable fehlt, denn die Anzahl der Seiten kann er ja auslesen um das Array zu bilden, aber hide scheint er nicht zu schnallen.
Wann userfuncs.php geladen wird, spielt zunächst mal keine Rolle. Entscheidend ist, wann die Funktion sitemapnum() aufgerufen wird. Wenn das in userfuncs.php erfolgt, dann wurden die Plugins noch nicht geladen, und Seiten die per page_params (Reiter "Seite") versteckt wurden, werden dann tatsächlich von hide() ignoriert. Das hatte ich nicht bedacht.

Vermutlich ist es das einfachste, wenn Du den Aufruf von sitemapnum() erst duchführst, nachdem alle Plugins geladen wurden. Das geht per XH_afterPluginLoading ganz einfach (benötigt PHP 5.3+). Dazu ersetzt Du folgendes:

Code: Select all

if (isset($_GET['seiteninhalt'])) {
   sitemapnum();
}
durch:

Code: Select all

XH_afterPluginLoading(function () {
   if (isset($_GET['seiteninhalt'])) {
      sitemapnum();
   }
});
Christoph M. Becker – Plugins for CMSimple_XH

knollsen
Posts: 459
Joined: Wed Nov 06, 2013 2:28 pm

Re: Kompletten Inhalt von content.htm ausgeben - OnePage

Post by knollsen » Fri Jul 10, 2015 1:19 am

SUPER - das war's doch - gut zu wissen
page_params (pagemanager) / filebrowser - sollte eigentlich nicht zu den Plugins zählen, das gehört eigentlich zum Herzstück dazu.
Ich hätte es sonst mit JavaPopUp gelöst, was eigentlich für die onePage auch eine gute Wahl wäre.
Nochmals Danke! (wieder was dazu gelernt)

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Kompletten Inhalt von content.htm ausgeben - OnePage

Post by cmb » Fri Jul 10, 2015 10:41 am

knollsen wrote:SUPER - das war's doch - gut zu wissen
Prima. :)
knollsen wrote:page_params (pagemanager) / filebrowser - sollte eigentlich nicht zu den Plugins zählen, das gehört eigentlich zum Herzstück dazu.
Für page_params steht das konkret zur Debatte. Bezüglich des Filebrowser habe ich aber Bedenken, da dieser ja auch durch einen anderen Filebrowser ersetzt werden kann, und man dann das Plugin auch einfach löschen kann (ähnlich wie den Pagemanager und den TinyMCE).
Christoph M. Becker – Plugins for CMSimple_XH

Post Reply