sitemap-funktion nutzen - wie mache ich das?

Diskussion zum Modul Menu (Automatische Navigation) für ConPresso 4
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 531
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 199 Mal
Danksagung erhalten: 17 Mal

sitemap-funktion nutzen - wie mache ich das?

Beitrag von hscha »

Guten Abend!

Ich möchte auf meiner Website nur die Sitemap-Funktion des mod_menu nutzen. Die Seitennavigation ist statisch.

Dazu habe ich in Conpresso die Navigation der statischen entsprechend angelegt und nun mod_menu installiert.

Ich möchte die Sitemap gern per _local_footer in einen Artikel einbinden und keine eigene Rubrik dafür anlegen. Wenn ich

Code: Alles auswählen

include(CPO_BASEDIR.$activeModules['Menu']['directory'].'/includes/sitemap.inc.php');
in _local_footer einbinde, bekomme ich die Fehlermeldung
Fatal error: Call to undefined function: getnavigation()
Wo muss ich o.g. Code einbinden, damit es funktioniert :?:
Über eine :idea: würde ich mich sehr freuen.

Hier die URL: http://www.gokinkel.cidsnet.de

Grüße von
HScha
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7115
Registriert: 01.01.1970 02:00
Hat sich bedankt: 102 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Tja... könnte an der Version liegen und dem Weglassen von
require_once(CPO_BASEDIR.'_include/printnavigation.inc.php');
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 531
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 199 Mal
Danksagung erhalten: 17 Mal

Beitrag von hscha »

Hallo Markus!

Meine ConPresso-Version ist 4.05, mod_menu_beta_3
Wo muss der Code-Schnipsel require_once hin?

Danke im Voraus!
HScha
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7115
Registriert: 01.01.1970 02:00
Hat sich bedankt: 102 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Ich würde Dir die genaue Stelle ja nennen, wenn ich den von Dir geschriebenen Code sehen könnte.
So kann ich nur sagen "darüber".

Also damit meine ich eine PHP Konstruktion wie

Code: Alles auswählen

require_once(CPO_BASEDIR.'_include/printnavigation.inc.php'); 
include(CPO_BASEDIR.$activeModules['Menu']['directory'].'/includes/sitemap.inc.php');
Im Grunde dürfte das aber gar nicht nötig sein, wenn Du 4.0.5 benutzt.
Dort wird in der Datei, die CPO_BASEDIR mit Inhalt füllt auch printnavigation mit eingebunden und somit kann getnavigation() nicht undefiniert sein, wenn die Pfade zur Datei sitemap.inc.php bekannt sind...

Aber um das zu beurteilen reicht das Wiederholen einer von mir geschriebenen Codezeile nicht sondern man müsste wissen, was DU drumherum geschrieben hast...
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 531
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 199 Mal
Danksagung erhalten: 17 Mal

noch ne Frage...

Beitrag von hscha »

Hallo Markus!

Bin gerade von der Arbeit zurück und habe deinen Tipp gefunden. Ich musste jedoch nix mehr tun, da die Sitemap nun läuft. Es gab offensichtlich ein Aktualisierungsproblem auf dem Webserver...
Eine andere Erklärung habe ich dafür nicht :?

Danke für die schnelle Reaktion!!!

Das nächste Problem betrifft nun die abgelaufenen Artikel. Die Sitemap zeigt sie zwar an, jedoch gelangt man mit Klick auf die Links nicht zu den archivierten Artikeln (trotz a name="<!-- VALUE: articelnr -->"></a>).

Kann man die abgelaufenen Artikel in der Sitemap markieren oder dafür sorgen, dass sie mit dem Link erreichbar sind?

Die Site ist unter der obigen URL aufrufbar...

Grüße aus Berlin von
HScha
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7115
Registriert: 01.01.1970 02:00
Hat sich bedankt: 102 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Kann man umbauen, müsste ich aber erst programmieren...
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 531
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 199 Mal
Danksagung erhalten: 17 Mal

Beitrag von hscha »

Ich finde, das wäre die Sache wert :) ...

Vielleicht könnte man abgelaufene Artikel auch ausblenden, ähnlich wie im mod_search...


Grüße von
HScha
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 531
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 199 Mal
Danksagung erhalten: 17 Mal

Problemlösung im Selbstbau...

Beitrag von hscha »

Hallo!

Nachdem nun meine Sitemap gut funktioniert, möchte ich gern das Problem mit den archivierten Artikeln in den Griff bekommen (s.o.).

Dazu ein paar Fragen:
1) Wie müsste ich eine Datenbank-Abfrage formulieren, um herauszufinden, ob ein Artikel abgelaufen ist?

2) Gibt es eine Möglichkeit, mit einem Sitemap-Link direkt auf einen archivierten Artikel zu verlinken, so dass er dann auch angezeigt wird?

Über :idea: dazu würde ich mich freuen...

Grüße von
HScha
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7115
Registriert: 01.01.1970 02:00
Hat sich bedankt: 102 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

zu 1) man müsste prüfen, ob das Verfallsdatum kleiner ist als das aktuelle Datum

zu 2) ja. Man müsste nur statt auf index.php auf archive.php verlinken.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 531
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 199 Mal
Danksagung erhalten: 17 Mal

Beitrag von hscha »

Hallo Markus!

Ich müsste die Datenbankabfrage also um die Abfrage des Verfallsdatums erweitern und anschließend mit dem aktuellen Datum vergleichen. Über if könnte ich dann sowohl einen Archiv-Hinweis zum Link-Text hinzufügen als auch auf die achive.php verweisen.

Müsste ich die Ergänzung in mod_menu/includes/sitemap.inc.php an dieser Stelle vornehmen (Zeile 67):

Code: Alles auswählen

$query = "SELECT titel, nr FROM ".CPO_NEWS." WHERE (rubric_id='".$nav_rubrik_id[$i]."' AND artikel_archiv=0) ORDER BY sort_id DESC";
:?:

Leider bin ich kein php-Insider. Bitte ein Tipp: Wie erfahre ich das Verfallsdatum? Den Rest reime ich mir dann selbst zusammen...

Grüße von
HScha
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7115
Registriert: 01.01.1970 02:00
Hat sich bedankt: 102 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Ergänze das Verfallsdatum, also

Code: Alles auswählen

$query = "SELECT titel, nr, verfallsdatum FROM ".CPO_NEWS." WHERE (rubric_id='".$nav_rubrik_id[$i]."' AND artikel_archiv=0) ORDER BY ..........
dann kannst Du $db->v("verfallsdatum") für den Vergleich benutzen...
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 531
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 199 Mal
Danksagung erhalten: 17 Mal

Beitrag von hscha »

Ich habe eine brauchbare Lösung gefunden:

Code: Alles auswählen

if ($db->v("verfallsdatum") <= $date ){
					if ($activeModules['Menu']['rubric_link'] == 'number')	$nav_link = "../" . $nav_rubrik_directory[$i] . "/archive.php?rubric=" . $nav_rubrik_id[$i] . "#" . $db->v("nr");
					if ($activeModules['Menu']['rubric_link'] == 'name')	$nav_link = "../" . $nav_rubrik_directory[$i] . "/archive.php?rubric=" . $nav_rubrik[$i] . "#" . $db->v("nr");
					$archivtext = '*';}				// hinweistext für archivierte Artikel
				else {
					if ($activeModules['Menu']['rubric_link'] == 'number')	$nav_link = "../" . $nav_rubrik_directory[$i] . "/index.php?rubric=" . $nav_rubrik_id[$i] . "#" . $db->v("nr");
					if ($activeModules['Menu']['rubric_link'] == 'name')	$nav_link = "../" . $nav_rubrik_directory[$i] . "/index.php?rubric=" . $nav_rubrik[$i] . "#" . $db->v("nr");
					$archivtext = '';}
				if ($db->v("pub_datum") >= $date ){ // noch nicht publizierte artikel kennzeichnen
					if ($activeModules['Menu']['rubric_link'] == 'number')	$nav_link = "../" . $nav_rubrik_directory[$i] . "/index.php?rubric=" . $nav_rubrik_id[$i] . "#" . $db->v("nr");
					if ($activeModules['Menu']['rubric_link'] == 'name')	$nav_link = "../" . $nav_rubrik_directory[$i] . "/index.php?rubric=" . $nav_rubrik[$i] . "#" . $db->v("nr");
					$archivtext = '**';}
Die Variable $archivtext wird unten an $with[] rangehängt. Außerdem habe ich die Datenbank-Abfrage noch ergänzt:

Code: Alles auswählen

WHEN ... AND freigabe=0
, um die Ausgabe von nicht freigegebenen Artikelreferenzen zu verhindern.
Noch nicht publizierte Artikel werden im obigen Code durch ** ergänzt. Ich habe noch nicht herausgefunden, wie man Links von noch nicht publizierten Artikeln ganz unterdrückt.
Die so modifizierte Sitemap ist hier zu sehen: http://www.gokinkel.cidsnet.de/gko.php?k=site

Grüße von
HScha :D
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 531
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 199 Mal
Danksagung erhalten: 17 Mal

Beitrag von hscha »

Inzwischen ist auch das letzte Problem gelöst, so dass nun in der generierten Sitemap sowohl richtig auf archivierte Artikel verwiesen, als auch noch nicht publizierte und nicht freigegebene ausgeblendet bleiben. Zudem sind die archivierten Artikel mit einem beliebigen Text oder Bild markierbar.
Der vollständige Code lautet ab Zeile 68:

Code: Alles auswählen

// nicht freigegebene artikel aussortieren mit AND freigabe=0 sowie noch nicht publizierte artikel mit pub_datum <=$date
	if ($activeModules['Menu']['sitemap_details'] == 1)  {
		$query = "SELECT titel, nr, verfallsdatum, pub_datum FROM ".CPO_NEWS." WHERE (rubric_id='".$nav_rubrik_id[$i]."' AND artikel_archiv=0 AND freigabe=0 AND pub_datum<='".$date."') ORDER BY sort_id DESC";  // müsste an Rubriksortierung angepasst werden
		DEBUG(2, $query, __FILE__, __LINE__);   
		$db = new DB;
		$db->query($query);
		if ($db->num_rows()>0)	{ 
			while($db->next_record()):				// verfallene artikel auf achive.php umschalten
				if ($db->v("verfallsdatum") <= $date ){
					if ($activeModules['Menu']['rubric_link'] == 'number')	$nav_link = "../" . $nav_rubrik_directory[$i] . "/archive.php?rubric=" . $nav_rubrik_id[$i] . "#" . $db->v("nr");
					if ($activeModules['Menu']['rubric_link'] == 'name')	$nav_link = "../" . $nav_rubrik_directory[$i] . "/archive.php?rubric=" . $nav_rubrik[$i] . "#" . $db->v("nr");
					$archivtext = '*';}				// hinweistext für archivierte Artikel
				else {
					if ($activeModules['Menu']['rubric_link'] == 'number')	$nav_link = "../" . $nav_rubrik_directory[$i] . "/index.php?rubric=" . $nav_rubrik_id[$i] . "#" . $db->v("nr");
					if ($activeModules['Menu']['rubric_link'] == 'name')	$nav_link = "../" . $nav_rubrik_directory[$i] . "/index.php?rubric=" . $nav_rubrik[$i] . "#" . $db->v("nr");
					$archivtext = '';}
				
				$ul_string .= '<br />&nbsp;&nbsp;&nbsp;';		// einrückung um 3 spaces -> hscha
				$replace[] = "### SITEMAP_ARTICLE_LINK ###";
				$with[] = $nav_link;
				$replace[] = "### SITEMAP_ARTICLE_TITLE ###";
				$with[] =  $db->v("titel").$archivtext;  		// ergänzung um archivhinweis
Der Datumsstring $date ist so zusammengesetzt:

Code: Alles auswählen

setlocale(LC_TIME,GERMAN);
$datum = strftime("%Y-%m-%d ");
$zeit = strftime("%H:%M:%S");
$date = $datum.$zeit;
Ich hoffe, dass dies auch anderen Sitemap-Nutzern hilft :)

Grüße von
HScha