Modul Artikelblättern

malsdgtac
Beiträge: 687
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Modul Artikelblättern

Beitrag von malsdgtac » Do 21. Sep 2006, 09:36

Hallo,

da ich nichts passendes gefunden habe, habe ich mir ein kleines Modul geschrieben, welches ich auch hier veröffentlichen möchte - vielleicht kann es ja jemand mal gebrauchen.

Was macht das Modul:
Das Modul erstellt aus allen Artikeln einer Kategorie (inkl. Startartikel) eine kleine Blätternfunktion. Man kann also von einem Artikel zum nächsten klicken.
Dies schaut dann z.B. so aus:
Bild

Das Modul
- erstellt einen "Zurück-Link" wenn es nicht die erste Seite ist
- stellt den ersten Artikel mit der Zahl "1" dar, den letzten mit der entsprechenen Zahl - inkl. Link darauf
- stellt die aktuelle Seite als nicht verlinkte Zahl dar
- ergänzt alle Zahlen dazwischen mit einem Platzhalter (frei wählbar)
- erstellt einen "Weiter-Link" wenn es nicht die letzte Seite ist

Ändern kann man dabei folgendes:
- Anzahl der Zahlen die am Anfang und Ende dargestellt werden (bei diesem Beispiel "1")
- Platzhalter (beim diesem Beispiel "..."
- Name des Links "zurück" und "weiter"
- Sortierung
- Sortierreihenfolge

Wozu kann man das Modul benutzen?
z.B. bei einer Bildergalerie, bei der jedes Bild einen eigenen Artikel bekommen soll

Vielen Dank dabei noch an HerrB und Kummer für Teile, die ich aus deren Modulen abgeschrieben habe.

Code: Alles auswählen

/*********************************************** 
* CONTENIDO MODUL - INPUT 
* 
* Modulname   :     artikellaettern
* Author      :     smac
* Created     :     21-09-2006 
* Created     :     21-09-2006 
************************************************/ 

echo "<table>
        <tr>
          <td>Anzahl der angezeigten Zahlen (Anfang und Ende):</td>
          <td><input type='text' name='CMS_VAR[1]' value='CMS_VALUE[1]'></td>
        </tr>
        <tr>
          <td>Platzhalter:</td>
          <td><input type='text' name='CMS_VAR[2]' value='CMS_VALUE[2]'></td>
        </tr>
        <tr>
          <td>Linkname zurück:</td>
          <td><input type='text' name='CMS_VAR[3]' value='CMS_VALUE[3]'></td>
        </tr>	
        <tr>
          <td>Linkname weiter:</td>
          <td><input type='text' name='CMS_VAR[4]' value='CMS_VALUE[4]'></td>
        </tr>
        <tr>
          <td>Sortierung:</td>
          <td>
		  	<select name='CMS_VAR[5]'>";
				if ("CMS_VALUE[5]" == "ARTLANG.created") {
   					echo "<option value='ARTLANG.created' selected>Erstelldatum</option>";
				} else {
					echo "<option value='ARTLANG.created'>Erstelldatum</option>'";
				}
				if ("CMS_VALUE[5]" == "ARTLANG.lastmodified") {
   					echo "<option value='ARTLANG.lastmodified' selected>Änderungsdatum</option>";
				} else {
					echo "<option value='ARTLANG.lastmodified'>Änderungsdatum</option>'";
				}
				if ("CMS_VALUE[5]" == "ARTLANG.published") {
   					echo "<option value='ARTLANG.published' selected>Veröffentlichunsdatum</option>";
				} else {
					echo "<option value='ARTLANG.published'>Veröffentlichunsdatum</option>'";
				}
				if ("CMS_VALUE[5]" == "ARTLANG.title") {
   					echo "<option value='ARTLANG.title' selected>Titel (Eigenschaften)</option>";
				} else {
					echo "<option value='ARTLANG.title'>Titel (Eigenschaften)</option>'";
				}
				if ("CMS_VALUE[5]" == "ARTLANG.summary") {
   					echo "<option value='ARTLANG.summary' selected>Zusammenfassung</option>";
				} else {
					echo "<option value='ARTLANG.summary'>Zusammenfassung</option>'";
				}
				if ("CMS_VALUE[5]" == "ARTLANG.artsort") {
   					echo "<option value='ARTLANG.artsort' selected>Sortierung</option>";
				} else {
					echo "<option value='ARTLANG.artsort'>Sortierung</option>'";
				}
echo "       </select>
		  </td>
        </tr>
        <tr>
          <td>Sortierung:</td>
          <td>
		  	<select name='CMS_VAR[6]'>";
				if ("CMS_VALUE[6]" == "ASC") {
   					echo "<option value='ASC' selected>aufsteigend</option>";
				} else {
					echo "<option value='ASC'>aufsteigend</option>'";
				}
				if ("CMS_VALUE[6]" == "DESC") {
   					echo "<option value='DESC' selected>absteigend</option>";
				} else {
					echo "<option value='DESC'>absteigend</option>'";
				}
echo "       </select>
		  </td>
        </tr>
	</table>
";

Code: Alles auswählen

<?php

/*********************************************** 
* CONTENIDO MODUL - OUTPUT 
* 
* Modulname   :     artikellaettern
* Author      :     smac
* Created     :     21-09-2006 
* Created     :     21-09-2006 
************************************************/ 


$anzahl = "CMS_VALUE[1]";
$platzhalter = "CMS_VALUE[2]";
$zurueck = "CMS_VALUE[3]";
$weiter = "CMS_VALUE[4]";
$sortiert = "CMS_VALUE[5]";
$steigung = "CMS_VALUE[6]";

if ($anzahl=="") $anzahl = 1;
if ($platzhalter=="") $platzhalter = "...";
if ($sortiert=="") $sortiert = "ARTLANG.created";
if ($steigung=="") $steigung= "ASC";


$sql = "SELECT ARTLANG.idart, ARTLANG.title, CATART.idcat, ARTLANG.created
FROM ".$cfg["tab"]["cat_art"]." AS CATART, ".$cfg["tab"]["art_lang"]." AS ARTLANG, ".$cfg["tab"]["cat"]." AS CAT 
WHERE CAT.idcat='$idcat' 
AND ARTLANG.idart = CATART.idart 
AND CATART.idcat = CAT.idcat
AND ARTLANG.idtplcfg = 0  
AND ARTLANG.idlang = '$lang' 
AND ARTLANG.online = '1'
ORDER BY ".$sortiert." ".$steigung;


$db->query($sql);
if ($db->num_rows() != 0)
{
echo "<div id='uebersicht'>";
$artikel = array(array());
$j=0;
$db->next_record();
$idart_last=$db->f("idart");
for ($i=0; $i<$db->num_rows(); $i++)
{
$artikel[$j][0] = $db->f("idart");
$artikel[$j][1] = $db->f("idcat");

$type = $db->f("idtype");
$typeid = $db->f("typeid");

while ( $idart_last==$db->f("idart") )
{
$idart_last=$db->f("idart");
$db->next_record();
$i++;
}

$idart_last=$db->f("idart");
$j++;
$i--;
}



// Zurückblättern
for ($i=0; $i < $j; $i++)
{
	if ($idart==$artikel[$i][0] && $i!=0) {
		$x = $i-1;
		$zurueck_link ="front_content.php?client=$client&lang=$lang&idcat=".$artikel[$x][1]."&idart=".$artikel[$x][0];
		echo "<a href='".$sess->url("$zurueck_link")."'>".$zurueck."</a> ";
	} 
}


// Zahlen und Platzhalter
for ($i=0; $i < $j; $i++)
{

	$k = $i+1;
	
	$navmod_link ="front_content.php?client=$client&lang=$lang&idcat=".$artikel[$i][1]."&idart=".$artikel[$i][0];

	if ($idart!=$artikel[$i][0]) {
		if ( $k <= $anzahl || $k > $j-$anzahl) {
			echo "<a href='".$sess->url("$navmod_link")."'>".$k."</a> ";
		} 
	} else {
		if ($k != 1 && $k != 2) { echo $platzhalter." " ; };
		echo $k." ";
		if ($k != $j-1 && $k != $j) { echo $platzhalter." "; };
	}	
	
}

// Weiterblättern
for ($i=0; $i < $j; $i++)
{
	if ($idart==$artikel[$i][0] && $i != $j-1) {
		$y = $i+1;
		$weiter_link ="front_content.php?client=$client&lang=$lang&idcat=".$artikel[$y][1]."&idart=".$artikel[$y][0];
		echo "<a href='".$sess->url("$weiter_link")."'>".$weiter."</a> ";
	} 
}

echo "</div>";
}


?>

netmax
Beiträge: 25
Registriert: Do 14. Sep 2006, 22:48
Kontaktdaten:

Beitrag von netmax » Fr 22. Sep 2006, 22:42

Hallo smac,

sehr schönes Modul, danke ... habe ich auch gerade gesucht :wink:

Ich finde es aber unsinnig, wenn die Navigation bei einer Kategorie mit nur einem Artikel erscheint, daher habe ich mal folgende Zeilen eingebaut:

Code: Alles auswählen

....

$idart_last=$db->f("idart");
$j++;
$i--;
}


// Nicht ausgeben, wenn nur eine Seite existiert...
if ($i>1)
  {
  echo "Seiten: ";

// Zurückblättern
for ($i=0; $i < $j; $i++)
{

....
... und ganz unten die schließende Klammer natürlich nicht vergessen:

Code: Alles auswählen

....

      echo "<a href='".$sess->url("$weiter_link")."'>".$weiter."</a> ";
   }
}

}	//Ende nicht ausgeben, wenn nur eine Seite...

....
LG
Marco

wosch

Beitrag von wosch » Do 5. Okt 2006, 18:16

Hallo smac,

sorry wenn ich dich belästige.
Ich habe gerade ein Problem wo dein Modul der Ausweg wäre.
Ich habe es installiert, aber irgendwie checke ich nicht das es was machen soll bzw. wie ich es handhaben muß.

Meine Situation:
Eine Kategorie mit 6 Artikel, und einem Startartikel (Artikleliste)
Nun kann der Besucher die Kat aufrufen, sieht die Artikelliste, und klickt einen Artikel an.
Um zum nächsten Artikel zu gelangen muß er entweder den (Java-Script) "zurück"-Link anklicken und dann auf den Link des nächsten Artikels, oder wieder auf den Navipath mit der Kat klicken und dann den Link des nächsten Artikels anklicken.

Wenn dein Modul er ermöglichen würde innerhalb der Artikle vor oder zurück zu blättern wäre es genau die Lösung.

Könntest du mir sagen ob es möglich ist und wenn wie?

Schon mal Danke im Voraus.

Gruß
wosch

malsdgtac
Beiträge: 687
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Beitrag von malsdgtac » Do 5. Okt 2006, 21:00

Hallo wosch,

du mußt das Modul nur in die Artikel (außer Startartikel) einbinden, dann wird eine kleine Navigation zum weiter und zurückblättern angezeigt.

Ich habe leider noch keine Version online wo ich es dir zeigen kann. Das Bild im ersten Thread (Was macht das Modul) zeigt dir aber sie dies aussieht.

Da du den User auswählen läßt, welchen Artikel er als ersten ansehen will (in deiner Artikelliste) kann es passieren, dass er nicht am Anfang sonder in der Mitte der Navigation landet.

wosch

Beitrag von wosch » Do 5. Okt 2006, 21:36

Hallo smac,

wenn ich es richtig verstanden habe muß ich für die x Artikel ein Template erstellen,
Container1: HTML-Headline (wie gehabt)
Container2: HTML Text (wie gehabt)
Container3: Modul artikelblaettern (neu in dem Template)

Startartikel ist eine Artikelliste, wenn dort das Modul nicht eingebunden ist dürfte es auch nicht beim Blättern erscheinen.

Also genau die Lösung die ich gesucht habe.

Ich bin ab morgen bis zum 11.10 oder 12.10. unterwegs,
ich werde es aber sofort probieren und testen wenn ich zurück bin.

Erstmal danke für die schnelle Reaktion und Hilfe.
Ich berichte dann wie es gegangen ist.

Gruß
wosch

mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf » Do 5. Okt 2006, 22:05

wosch hat geschrieben: Container1: HTML-Headline (wie gehabt)
Container2: HTML Text (wie gehabt)
Container3: Modul artikelblaettern (neu in dem Template)
genau so geht's ;)
wosch hat geschrieben: Startartikel ist eine Artikelliste, wenn dort das Modul nicht eingebunden ist dürfte es auch nicht beim Blättern erscheinen.
rischtitch, ist also ein eigenes template und hat ja nebenbei eine eigen 'pagination' (siehe ende output der artikelliste) für den fall des es mehr artikel gibt als du zur anzeige auf einer seite spezifiziert hast

abschliessend noch die css classes abgleichen, dann sehen die sogar gleich aus ;)
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams

wosch

Beitrag von wosch » Mi 11. Okt 2006, 20:55

Hallo miteineinder, Hallo smac, hallo mvf,

das Modul tut nicht das was es soll.
Gemacht wie oben beschrieben.

Es zeigt sinnigerweise nur den Link 1 2 an bei den 2 Artikeln die NICHT das Modul im Layout haben.

Falls dieser Effekt nicht bekannt ist, ich habe eine komplette Reihe mit Screenshots gemacht.
Kann ich gerne einstellen
(muß aber nicht sein wenn es für diesen Effekt eine Lösung gibt)

Ziemlich ratlos, viele Grüße
wosch

mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf » Mi 11. Okt 2006, 21:29

wosch hat geschrieben: Es zeigt sinnigerweise nur den Link 1 2 an bei den 2 Artikeln die NICHT das Modul im Layout haben.
das geht ja man gar nicht

wenn was angezeigt wird ann aus einem modul heraus und nicht von selbst

gehs nochmal durch:

standardtemplate duplizieren für artikelblättern zu testen
modul einbinden
artikel das template zuweisen
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams

wosch

Beitrag von wosch » Mi 11. Okt 2006, 21:39

mvf,
das geht ja man gar nicht
Wem sagst du das.

Ich bin der Meinung das alles richtig ist,
aber anscheinend ist irgend wer/was anderer Meinung.
Ich werde morgen eine Bildserie einstellen die zeigt was ich gemacht habe
und was das Ergebnis ist.

malsdgtac
Beiträge: 687
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Beitrag von malsdgtac » Do 12. Okt 2006, 09:47

@ wosch,
ja, mach das.

Wie mvf schon schreibt, kann es dein Problem eigentlich nicht geben :shock: - aber was gibt es nicht alles.

Also rein mit den Bildern, das hilft dann weiter.

wosch

Beitrag von wosch » Do 12. Okt 2006, 10:58

So, hier nun was und wie ich was gemacht habe.
Modul installiert (Contenido 4.6.8.5 - läuft ansonsten wuderbar, war ein Update von 4.6.8 )
Und immer wieder mal zwischendurch die con_code geleert.

Ich habe ein Layout mit Namen start.
Ich habe ein neues Layout mit Namen "blaettern" erstellt, dieses Layout entspricht dem start mit einer Ausnahme:

Code: Alles auswählen

 ...
<DIV ID="content"> 
<DIV ID="navipath"><container id="60" name="Navigationspfad" types="Navigation" mode="fixed" default="Navigationspfad">Navigationspfad</container></DIV>
<container id="10" name="Headline" types="Content" default="Headline (HTML)">Headline (HTML)</container>
<container id="12" name="Text" types="Content" default="">Content 1</container>
<container id="15" name="blaettern" types="Content" default="">Content 2</container>
...
Es wurde für blaettern der Container 15 neu eingesetzt.
(Contaier 15 kommt nur ein einziges Mal bei "blaettern" vor, im "start" wird es nicht verwendet, Testweise habe ich den Namen auch mal auf Text geändert)

Auf der Grundlage des Layoutes blaettern habe ich ein Template "Artikel blattern" erstellt.
Die Konfiguration sieht man hier:

Bild

und hier:

Bild

Für diese Beschreibung (und Screenshots) habe ich 5 Seiten in einer Kategorie erstellt.

Bild

Wenn ich nun diese Kategorie aufrufe erscheint die Startseite mit manuell eingesetzten Links zum Aufrufen der einzelnen Seiten:

Bild

Bei Seite 4 und 5 dürfte kein Link zum Blättern erscheinen, und erscheint auch nicht.

Nun ein Klick auf Seite 2:

Bild

Es erscheinen 2 Links: 1 und 3
Nur, wenn ich auf 1 klicke -> wird die Seite 5 aufgerufen
wenn ich auf 3 klicke -> wird die Seite 1 aufgerufen.
Beide Seiten sind aber nicht zum Blättern gedacht.


Nun die Seite 3:

Bild

Hier sind 3 Links: 1, 2 und 3
Klick auf 1 -> Seite 5 wird aufgerufen
klick auf 2 -> Seite 4 wird aufgerufen
klick auf 3 -> Seite 1 wird aufgerufen

So, was ist nun falsch?
Habe ich einen Fehler gemacht?
Habe ich einen Gedankenfehler gemacht?

Ich weiß es nicht, nach meinem dafürhalten ist alles richtig, aber es funktioniert nicht.

malsdgtac
Beiträge: 687
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Beitrag von malsdgtac » Do 12. Okt 2006, 13:39

Hallo wosch,

ich glaube jetzt habe ich dein Problem verstanden.

Das Modul kann nicht unterscheiden, welchen Artikel welche Templates zugeordnet sind!

Für das Modul gibt es in dieser Kategorie 5 Seiten (inkl. Startseite) und alle diese bindet das Modul ein - daher bin ich auch etwas überrascht, dass hier nicht 1 - 5 steht, aus irgendeinem Grund elimiert das Modul wohl die Seiten 2 und 3. Das ist mir noch nicht klar warum.
Hier sind 3 Links: 1, 2 und 3
Klick auf 1 -> Seite 5 wird aufgerufen
klick auf 2 -> Seite 4 wird aufgerufen
klick auf 3 -> Seite 1 wird aufgerufen
Das ist grundsätzlich klar. Du hast als Sortierreichenfolge "Sortierung absteigend" gewählt. Daher werden die Seiten umgekehrt zur Sortierreihenfolge angezeigt.

wosch

Beitrag von wosch » Do 12. Okt 2006, 19:04

Hallo smac,

danke erstmal für deine schnelle Antwort.

Immerhin beruhigt es mich das ich keinen Gedanken- oder Logikfehler gemacht habe.

Ich habe mal weitergesucht ob ich was finde warum es nicht tut.
Dabei ist mir eingefallen das ich schon mal ein Modul ausprobiert habe das bei mir nicht funktionierte.
Es war ein Modul das den Navipath als Breadcrumb bis auf den dargestellten Artikel angezeigt hat.
Das Modul lief bei einigen unter 4.6.x aber bei mir nicht.
Als ich damals im Forum weitergesucht habe fand ich als einzigen Unterschied den Umstand das dort wo es läuft ursprünglich eine Contenido-Version 4.4 (oder 4.5) mit Update auf 4.6.x verwendet wurde.
(Ich hatte aber eine 4.6.x direkt mit Beispielmandaten installiert)

Ich hatte damals nicht die Zeit weiterzugucken.
Ob es was mit dem Artikel blättern zu tun hat, ich weiß es nicht, es fiel mir nur wieder ein.
Vielleicht ist es ja ein Stichwort für einen Einfall.

Dein Modul würde ich schon sehr gerne einsetzen, es ist ideal für Artikel, die zwar nichts miteinander zutun haben, aber als ganzes gesehen werden sollten.

Gruß
wosch

malsdgtac
Beiträge: 687
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Beitrag von malsdgtac » Do 12. Okt 2006, 19:23

Hallo Wosch,

also das Modul ist grundsätzlich so konzipiert, alle Artikel in einer Kategorie zu durchblättern.

Da du dies nicht willst (sondern nur zwei?) solltest du dir eventuell eine andere Strukutr überlegen? Ich habe auch irgendwo ein Modul gesehen, das lange Texte auf mehrere Artikel aufteilt - vielleicht hilft dir das weiter?

wosch

Beitrag von wosch » Do 12. Okt 2006, 20:08

smac,

ich glaube das ist ein Mißverständnis.
Ich wollte sehr wohl alle Artikel einer Kategorie durchblättern, nur

Schau selber was dann passiert:

Bild

Es sind die gleichen Artikel wie im ersten Post, nur jetzt alle mit dem Template Artikel blaettern versehen.
Laß dich nicht vom Text in den Seiten irrietieren, dort habe ich den Text nicht geändert.

Aufruf Seite 1:

Bild


Aufruf Seite 3:

Bild


Du kannst alle 5 Seiten aufrufen, wenn alle Artikel das Template Artikel blaettern haben wird *nichts* angezeigt was nur im entferntesten wie eine Linkleiste aussieht.

Wenn eine Linkleiste angezeigt wird, dann immer nur bei den Artikel die das Template/Modul "Artikel blaettern" *nicht* haben.

Das ist ja das verblüffende daran.

Nachtrag:
Im Quelltext ist ebenfalls nichts zu sehen was auf das vorhandensein des Moduls hindeutet.
Ich kann die Passage des Quelltextes gerne auch posten.
Zuletzt geändert von wosch am Do 12. Okt 2006, 20:21, insgesamt 1-mal geändert.

Gesperrt