Navigation mit Artikeleinträgen

Allgemeine Diskussionen zu ConPresso 4. Handhabung, Möglichkeiten, Verständnisfragen.
Achtung: Bitte benutzt wenn möglich die themenspezifischen Foren!
Antworten
PJ

Navigation mit Artikeleinträgen

Beitrag von PJ »

Hallo zusammen,

ich habe einige Fragen auf die leider bei der Forumsuche keine Antworten zu finden waren:

1.Ich möchte gerne (CPO4RC2) zwei Navigationen ( 2 Rubriken) erstellen bei der die Artikel ausgelesen und in der Navigation angezeigt werden sollen. Ist das möglich oder muss ich selbst für einen einzigen Artikel eine neue Unterrubrik erstellen?

2. Im Newsbereich sollen auf der Detailseite sowohl die gesamten News ( oder top 10) angezeigt werden als auch die gerade ausgesuchte Nachricht. Kann das nur mit einem Artikeltemplate (Detail) umgesetzt werden oder ist es möglich das logisch in den _lokal_header/footer-Dateien zu organisisieren und das Artikeltemplate weiter auf die Ausgabe des "Contents/Artikel" zu beschränken?

3. Wie erstelle ich automatische Links (PATH-Info-Berücksichtigung) zu den Detailseiten?

Ich hoffe es können einige Fragen geklärt werden. Vielen Dank im Voraus.
Benutzeravatar
Matthias V
Modul-Entwickler
Beiträge: 1251
Registriert: 01.01.1970 01:00
Wohnort: Sondershausen
Hat sich bedankt: 54 Mal
Danksagung erhalten: 147 Mal
Kontaktdaten:

Re: Navigation mit Artikeleinträgen

Beitrag von Matthias V »

Hallo PJ,

zu 1. das habe ich gerade letztens mal gemacht, kann ich dir morgen posten, wenn ich mehr Zeit habe.
Ich hatte das hier mal angekündigt: http://conpresso.de/conpresso/phorum/re ... =378&t=378#reply_848

Gruß Matthias V
Auto-Edit: Link veraltet - neuer Link: http://community.conpresso.de/viewtopic ... 2035#10708
mod_Guestbook 4.1.0

Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Re: Navigation mit Artikeleinträgen

Beitrag von MarkusR »

Zu 1.) Ist nicht möglich, wenn Du nicht ein eigenes Navigationssystem entwickelst. Für CP3.4 hatt ich mal eines entwickelt, bei der die Artikel die letzte Navigationsstufe darstellten...
zu 2.) sicher wird es irgendwann auch das modul index_x für CP4RC2 geben. Oder Du baust das selbst. Und wenn, ist es eine Sache, die AUSSERHALB des Artikeltemplates passiert.
zu 3.) keine Ahnung (bei mir funzt path-info nicht)

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
PJ

Re: Navigation mit Artikeleinträgen

Beitrag von PJ »

Ja super vielen Dank!

Über eine Funktion zum Artikelauslesen würde ich mich sehr freuen!

zu 2. Da muss ich das wohl erst auf dem etwas uneleganten Weg machen. Aber wenn der Redakteur kein anderes Artikeltemplate nimmt, wird das Design ja auch nicht "zerschossen".
Benutzeravatar
Matthias V
Modul-Entwickler
Beiträge: 1251
Registriert: 01.01.1970 01:00
Wohnort: Sondershausen
Hat sich bedankt: 54 Mal
Danksagung erhalten: 147 Mal
Kontaktdaten:

Re: Navigation mit Artikeleinträgen

Beitrag von Matthias V »

Hallo PJ,

nun also zu den Artikeln, die mit in der Navigation stehen sollen.
Vorraussetzung ist dass du die Navigation von M.Klaucke benutzt.

Es müssen Anpassungen in der _include/function.inc.php vorgenommen werden. Und zwar das Fett dargestellte musst du noch einfügen.
Zeile 564: $query = 'SELECT id, directory, name, seclevel, source_rubric_id, settings '
Zeile 571: $rubrics[$db->v('id')] = array('id'=>$db->v('id'), 'directory'=>$db->v('directory'), 'name'=>$db->v('name'), 'seclevel'=>$db->v('seclevel'), 'source_rubric_id'=>$db->v('source_rubric_id'), 'settings'=>unserialize($db->v('settings')));

Folgendes gehört in die navigation.inc.php von M.Klaucke:

Code: Alles auswählen

// Erstellt von M.Vorwergk
// array getArticles(RubrikId, Sortierreihenfolge)
// liefert einen Array aller Artikel, die sich in der Rubrik befinden und freigegeben sind

function getArticles($rubricId,$sorting) {
	$now = time();
	$query = "SELECT nr, artikel_archiv, article_nr, rubric_id, titel, pub_datum, "
		."verfallsdatum, idx, freigabe, released_user_id, sort_id, templates_id "
		."FROM ".CPO_NEWS." "
		."WHERE rubric_id='".$rubricId."' "
		."AND ".($cpoSystem['release'] ? "artikel_archiv<'2' AND freigabe='0' " : "artikel_archiv<'1' AND freigabe!='2' ")." "
//		."AND freigabe='0' AND artikel_archiv<'2' "
//		."AND released_user_id!='0' "
		."AND pub_datum<='".date('Y-m-d H:i:s', $now)."' "
		."AND verfallsdatum>='".date('Y-m-d H:i:s', $now)."' "
		."ORDER BY ".$sorting." ";
	DEBUG(1, $query, __FILE__, __LINE__);
	$db = new DB;
	$db->query($query);      // echo $cpoSystem['release'];
	$articles = array();
	while ($db->next_record()) {
		$articles[$db->v('nr')] = array(
			'nr'=>$db->v('nr'), //'nr'=>$db->v('article_nr'),
			'article_nr'=>$db->v('article_nr'),
			'artikel_archiv'=>$db->v('artikel_archiv'),
			'pub_datum'=>$db->v('pub_datum'),
			'verfallsdatum'=>$db->v('verfallsdatum'),
 			'rubric_id'=>$db->v('rubric_id'),
			'titel'=>$db->v('titel'),
			'idx'=>$db->v('idx'),
			'freigabe'=>$db->v('freigabe'),
			'sort_id'=>$db->v('sort_id'),
			'templates_id'=>$db->v('templates_id'),
		);
	}
	return $articles;
}

// Erstellt von M.Vorwergk
// liefert einen Array aller Templates, um z.B. abzufragen, ob es eine Detailseite gibt

function getTemplates($templates_Id) {
	$query = 'SELECT id, name, tpl_first, tpl_detail, tpl_javascript '
		.'FROM '.CPO_TEMPLATES.' ';
	DEBUG(1, $query, __FILE__, __LINE__);
	$db = new DB;
	$db->query($query);
	$templates = array();
	while ($db->next_record()) {
		$templates[$db->v('id')] = array(
			'id'=>$db->v('id'),
			'name'=>$db->v('name'),
			'tpl_first'=>$db->v('tpl_first'),
 			'tpl_detail'=>$db->v('tpl_detail'),
			'tpl_javascript'=>$db->v('tpl_javascript'),
		);
	}
	return $templates;
}

// Erstellt von M.Vorwergk
// Gibt Links zu allen Artikeln in einer Rubrik aus
// Die Links weisen auf die Indexseite mit dem Anker: 
//  <a name="artikel_<!-- Value: articlenr -->" class="anker"></a> (muss in Template stehen)

function printArticles($rubric,$navArray) {
	if ($rubric['rubric'] == "")
		return;
	if ($rubric['rubric']['settings']['disableRubric'])
		echo "<ul class='articles'><li>".$rubric['rubric']['settings']['disableRubricText']."</li>".$trennzeichen."</ul>";
	else {
		if ($rubric['rubric']['settings']['sorting'])
			$sorting = $rubric['rubric']['settings']['sorting'];
		else
			foreach ($navArray as $k=>$v)
				if ($v['rubric']['id'] == $rubric['rubric']['source_rubric_id'])
					$sorting = $v['rubric']['settings']['sorting'];
		$articles=getArticles($rubric['rubric']['id'],$sorting);
		$i = 0;
		if (!empty($articles)) echo "<ul class='articles'>";
		foreach ($articles as $key=>$value) {
			$pos = $i - ($i % $rubric['rubric']['settings']['noOfArticles']); //Wählt die richtige Indexseite.
			$templates = getTemplates($value['templates_id']);
			foreach ($templates as $t_key=>$t_value)
				if ($t_value['id']==$value['templates_id'])
					if (strlen($t_value['tpl_detail'])<10)
						echo "<li><a class='articles' href='../".$rubric['rubric']['directory']
							."/index.php?rubric=".$rubric['rubric']['id'].(($pos > 0) ? "&pos="
							.$pos : "")."#artikel_".$value['nr']."'>".$value['titel']."</a></li>\n";
					else
						echo "<li><a class='articles' href='../".$rubric['rubric']['directory']
							."/detail.php?nr=".$value['nr']."&rubric="
							.$rubric['rubric']['id']."'>".$value['titel']."</a></li>\n";
			$i++;
		}
		if (!empty($articles)) echo "</ul>";
	}
}
In die Funktion printLevel2 muss dann noch der Aufruf von der Funktion printArticles
Und zwar überall wo in der id des <a>-Tags "Activ" steht muss vor die Zeile eine öffnende geschweifte Klammer und nach der Zeile muss einen neue Zeile eingefügt werden: printArticles($value,$navArray,''); } bzw. printArticles($v,$navArray); }
Möglicherweise musst du davor noch so etwas wie if ($v['rubric']['id'] == Zahl) um die Ausgabe der Artikel nur auf bestimmte Rubriken zu beschränken.
Ob du $v oder $vaule schreibst richtet sich danach, ob in der Zeile nach der du den Code einfügst $v oder $value steht.

Wenn du die Artikel auch an Rubriken der Navigationsebene 1 haben möchtest, dann muss nach die erste Zeile (mit echo "<ul beginnend) folgender Code:

Code: Alles auswählen

	foreach ($navArray as $key=>$value)
		if ($key == $actKey1)
			printArticles($value,$navArray);
und in dem Global_header.php muss bei dem Aufruf der Funktion printLevel2 in der If-Sleife noch AND ($actRubric['childs'] > 0) endferrnt werden und gegebenenfalls aus Kommentar hinter diese if-Abfrage geschrieben werden.


So jetzt hoffe ich, das ich nichts vergessen habe.
Und ich garantiere nicht dafür, dass dies 100% funktioniert, denn bei der Datenbankabfrage der Artikel war ich mir nicht ganz so sicher (daher auch die auskommentierten Zeilen), aber bei mir funktioniert es gut, und das sollte es bei dir auch machen.

Gruß Matthias V



Beitrag bearbeitet (23.06.05 14:45)
Zuletzt geändert von Matthias V am 22.08.2005 20:17, insgesamt 1-mal geändert.
Benutzeravatar
Matthias V
Modul-Entwickler
Beiträge: 1251
Registriert: 01.01.1970 01:00
Wohnort: Sondershausen
Hat sich bedankt: 54 Mal
Danksagung erhalten: 147 Mal
Kontaktdaten:

Re: Navigation mit Artikeleinträgen

Beitrag von Matthias V »

Ich habe an meinem Code noch etwas geändert, damit Validatoren nicht meckern.
Und zwar habe ich in function printArticles () im letzten else-Zeig &rubric= ersetzt durch &rubric=.
Falls beim Kopieren &amp; im Quelltext erscheint muss man einmal amp; entfernen.

@PJ:
Bei solch umfangreichen Code mit umfangreicher Anleitung würde ich mich über Feedback freuen, ob es denn so funktioniert wie ich es beschrieben und geschrieben habe, da ich auch noch etwas anders geschrieben habe als ich es verwende. (ich hatte eine

Code: Alles auswählen

<div><a>
-Lösung und keine

Code: Alles auswählen

<ul><li><a>
-Lösung bei mir eingesetzt)

Gruß Matthias V
Zuletzt geändert von Matthias V am 22.09.2005 13:55, insgesamt 2-mal geändert.
Benutzeravatar
Matthias V
Modul-Entwickler
Beiträge: 1251
Registriert: 01.01.1970 01:00
Wohnort: Sondershausen
Hat sich bedankt: 54 Mal
Danksagung erhalten: 147 Mal
Kontaktdaten:

Re: Navigation mit Artikeleinträgen

Beitrag von Matthias V »

Hallo an alle die diesen Script nutzen,

ich habe noch etwas in der Funktion printArticles ergänzt, damit die Links zu den Indexseiten richtig funktionieren.
Bisher war es so, dass immer nur auf index.php?rubric=...#artikel_... verlinkt wurde und ich habe jetzt noch eingefügt, dass falls es mehrere Seiten einer Indexseite gibt auf die richtige verlinkt wird.

Desshalb habe ich noch den Parameter $pos eingefügt. Die Links sehen jetzt folgendermaßen aus: index.php?rubric=...&pos=...#artikel_...

Gruß Matthias V



Beitrag bearbeitet (23.06.05 14:59)
mod_Guestbook 4.1.0

Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
holgi
ConPresso-Newbie
Beiträge: 4
Registriert: 01.01.1970 01:00

Re: Navigation mit Artikeleinträgen

Beitrag von holgi »

Hallo.

Ich habe mir nun fast alle Themen zu der Navigationserstellung durchgelesen.
Irgendwie blicke ich jetzt gar nicht mehr durch.


Ist es vielleicht möglich, das jemand einmal eine vollständige und bereinigte Version von M. Klauke mit den Änderungen von Matthias V. hier veröffentlicht ?

Wäre toll.

mfg

Holger
clara

Re: Navigation mit Artikeleinträgen

Beitrag von clara »

Ich verstehe auch nicht, warum das nicht plausibel erklärt wird.
PJ

Beitrag von PJ »

AUch wenn es scho lange her ist, der Code hat super funktioniert!
Benutzeravatar
Matthias V
Modul-Entwickler
Beiträge: 1251
Registriert: 01.01.1970 01:00
Wohnort: Sondershausen
Hat sich bedankt: 54 Mal
Danksagung erhalten: 147 Mal
Kontaktdaten:

Beitrag von Matthias V »

Hallo clara und holgi,

diese hier im Forum veröffentlichten Code-Schnipsel sind alle zur Zeit der Beta bzw. RC Version von Conpresso entstanden. Jetzt gibt es noch eine weitere Conpresso-Eigene Version, die Balu hier im Forum auch beschrieben hat.

Das was speziell hier steht, sind Änderungen, die sehr ins detail gehen und die man in mehreren Dateien vornehmen muss, zudem habe ich dies in mehreren Webseiten in unterschiedlichen Formen eingesetzt, was eine gesammte Veröffentlichung schwierig macht.

Entweder ihr versucht euch ein bisschen in PHP einzuarbeiten und setzt dies hier beschriebene um, oder ihr benutzt die Rekursive Conpresso-eigene Ausgabefunktion (die ich mir noch nicht angeschaut habe).

Ihr könnt auch das Ausgabemodul von MarkusR benutzen, was sich zur Zeit wahrscheinlich in der Version Beta3 (beachtet dazu seine Bedingungen für Beta Tester) befindet oder warten bis dieses Modul fertig ist. Aber ich weiß micht ob MarkusR die Artikel mit als eine weitere Navigationsebene einbaut.

Aber wenn ihr die einzelnen Artikel mit in die Navigation einbauen möchtet dann setzt doch einfach das hier beschriebene um (ein bisschen Quelltext sollte jeder Admin bearbeiten können, nach den beschreibungen hier im Forum).

Ich habe es wahrscheinlich auch ausführlich genug beschrieben, denn PJ hat alles so umgesetzt und es funktioniert bei ihm.

Gruß Matthias V

______________________________ 12.10.2005______________________

Ich habe jetzt, zur Zeit für Version 4.0.3, diese Artikelnavigation in die Conpresso eigene Navigation printnavigation(); eingebaut.
Diese Navigation ist jetzt sehr variabel und lässt sich einfach einbauen.
Man kann angeben, ob man nur Navigationseinträge zu Artikeln mit Detailseite (je nach Template) oder auch zu Artikeln, die nur eine Index-seite haben, ausgeben möchte . Dann kann man einfach wählen, ob man eine "Wo bin ich Struktur" ausgeben möchte, die auch als Breadcrumb-Navigation bezeichnet wird.

Wer diese Sachen haben möchte, meldet sich einfach bei mir (z.B. per PN).

Man benutzt diese Funktionen einfach durch Aufruf der Funktion printnavigation(); mit 2 weiteren Parametern.
mod_Guestbook 4.1.0

Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Antworten