Artikelliste mit "direkten" Zugriff

Eric A.
Beiträge: 75
Registriert: Sa 15. Jan 2005, 18:04
Wohnort: Laer - NRW
Kontaktdaten:

Artikelliste mit "direkten" Zugriff

Beitrag von Eric A. » Do 17. Mär 2005, 14:34

Hallo Zusammen,

ich verwender die Artikellsite w3concepts.alist.mod3. Ich habe die Sortierung geändert so, dass ich jetzt der Bakend-Titel (title) verwende. Alle klapt ganz gut.
Mein Ziel ist diese Artikelliste zu verwenden für eine Auflistung von Tiere, die Alphabetisch - durch den title - sortiert werden. Pro Artikel wird der Latein-Namen (headline) und eine Thumbild angezeigt.

So jetzt kommt das Problem bzw. die Frage: ich möchte zusätztlich oben am Beginn der Liste eine Zeile mit dem Alphabet und Anchor einsetzten.
So dass durch Auswahl einer Buchstabe, springt man direkt an die Artikeln, die mit diesen Buchstabe anfängen.

Ich hoffe, dass ich mich korrekt ausgedruckt habe.

Ich habe noch keinen solchen Modul gesehen. Aber ich glaube, dass so etwas machbar wäre?

Gruß
Eric
Contenido 4.4.5-r1
Contenido V4.6.15 Version MR

Beleuchtfix
Beiträge: 1082
Registriert: Di 22. Jul 2003, 10:14
Wohnort: Hessen
Kontaktdaten:

Beitrag von Beleuchtfix » Fr 18. Mär 2005, 00:44

Such mal hier im Forum, das Problem wurde schon einmal angesprochen (so in Richtung Lexikon als Suchwort).

Viel Erfolg
Florian

Eric A.
Beiträge: 75
Registriert: Sa 15. Jan 2005, 18:04
Wohnort: Laer - NRW
Kontaktdaten:

Beitrag von Eric A. » Fr 18. Mär 2005, 11:03

Hallo

Gesucht hatte ich schon.
Außer diesen Link http://www.contenido.org/forum/viewtopic.php?t=6366 habe ich nichts gefunden.

Tja werde noch einmal eine bisschen PHP lernen und vielleicht wäre ich es hinbekommen. Aber für jede Hilfe wäre ich dankbar.

Eingentlich wollte ich soetwas machen:
* Tabelle mit dem Alphabet und default Anchor (Name="A", "B", usw...)

In der Schleiffe der Ausgabe - die schon durch den Backend-Titel alphabetisch sortiert ist - wollte ich dann
* Test des ersten Buchstabe vom Backend-Titel und dann den entsprechenden Anchor zuweisen.

Es würde bedeuten, dass wenn ich zwei Artikel mit dem gleichen Buchstabe habe, werde ich zweimal den Anchor zuweisen.
Nicht gefunden Buchstabe werden kein Anchor zugewiesen.

Ist die Grundprinzip Ok, oder habe ich irgendwo einen Denkfehler?

Gruß
Eric
Contenido 4.4.5-r1
Contenido V4.6.15 Version MR

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Fr 18. Mär 2005, 11:23

Hallo Eric,
Eric A. hat geschrieben:Es würde bedeuten, dass wenn ich zwei Artikel mit dem gleichen Buchstabe habe, werde ich zweimal den Anchor zuweisen.
Nicht gefunden Buchstabe werden kein Anchor zugewiesen.
ich weiss nicht, ob das so gut ist. Ich hab's aber auch nie ausprobiert: wenn der Ankername an zwei Stellen vorhanden ist, wohin wird dann gesprungen? Immer zum ersten, oder nach dem Zufallsprinzip? :) Ich wuerd's erstmal an einer statischen HTML-Seite probieren.

Gruss
Christa

Eric A.
Beiträge: 75
Registriert: Sa 15. Jan 2005, 18:04
Wohnort: Laer - NRW
Kontaktdaten:

Beitrag von Eric A. » Fr 18. Mär 2005, 12:18

Hallo Halchteranerin,

Anchor:
Ich habe es gerade unter IE 6, Mozilla 1.6, Firefox 1.0.1 und Netscape 4.78 und 7.1 getest. Also es scheint überall zu funktionieren:
- man springt auf dem ersten gesetzten Anchor in der Seite

Aber du hast Recht, dass es nicht sauber ist. Für den ersten Entwurf würde ich es also so machen und im zweiten würde ich die Redundanz entfernen.

Gruß
Eric
Contenido 4.4.5-r1
Contenido V4.6.15 Version MR

Eric A.
Beiträge: 75
Registriert: Sa 15. Jan 2005, 18:04
Wohnort: Laer - NRW
Kontaktdaten:

Beitrag von Eric A. » Fr 18. Mär 2005, 14:08

So ich habe jetzt einen Pseudo-Algorithm geschrieben, der keine Redundanz enthälten sollte:

Code: Alles auswählen

//ganz vorne
lastfound =0;
Kette = "ABCD.....Z"

// in der Schleiffe
for i= lastfound to End
(
  if title = Kette[i] 
  (
     Anchor setzen
     lastfound=i+1;
     break
  )
)
So jetzt muss ich noch schauen, wie ich das in PHP umsetze.

Gruß
Eric
Contenido 4.4.5-r1
Contenido V4.6.15 Version MR

darthbach
Beiträge: 11
Registriert: Fr 30. Jul 2004, 11:00
Wohnort: Duisburg
Kontaktdaten:

Beitrag von darthbach » Di 22. Mär 2005, 13:46

Hallo.

Ich habe mal folgenden Code direkt aus Contenido herauskopiert.

Bitte die SQL-Anweisungen noch anpassen!!!!
Es gibt bei mir in den Artikeln ein eigenes Feld für das Glossar.

Code: Alles auswählen

<?php

echo "<!-- Modul: Glossarliste -->\n";

function klein($text) {
	$text = urldecode($text);

	$text = strip_tags($text, "");

//	$text = str_replace(" ", "_", $text);
	$text = str_replace(":", "_", $text);
	$text = str_replace("(", "_", $text);
	$text = str_replace(")", "_", $text);
	$text = str_replace("[", "_", $text);
	$text = str_replace("]", "_", $text);
	$text = str_replace("'", "_", $text);
	$text = str_replace('"', '_', $text);

	$text = strtolower($text);

	$text = str_replace("ä", "ae", $text);
	$text = str_replace("ö", "oe", $text);
	$text = str_replace("ü", "ue", $text);
	$text = str_replace("ß", "ss", $text);

	return $text;
}

function unterkategorien($kategorie) {
	global $cfg, $unterkat;
	$unterkat[] = $kategorie;

	$db = new DB_Contenido;
	$sql = "SELECT idcat FROM {$cfg['tab']['cat']} WHERE parentid = '".$kategorie."' ORDER BY idcat ASC;";
	$db->query($sql);

	while ($db->next_record()) {
		unterkategorien($db->f("idcat"));
	}
}

$db = new DB_Contenido;
$db2 = new DB_Contenido;

$breiterand = 5;
$breitekomplett = 200 - 2 * $breiterand;

$liste = array("0-9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "@");

foreach ($liste as $buchstabe) {
	$gesamt[$buchstabe] = "";
}

$unterkat = array();
unterkategorien(24);

// liest die anzahl betroffener artikel aus der datenbank
$sql = "SELECT count(*) AS anzahl FROM ".$cfg['tab']['cat']." AS a LEFT JOIN ".$cfg['tab']['cat_art']." AS b ON a.idcat = b.idcat LEFT JOIN ".$cfg['tab']['art_lang']." AS c ON b.idart = c.idart LEFT JOIN ".$cfg['tab']['content']." AS d ON c.idartlang = d.idartlang LEFT JOIN ".$cfg['tab']['cat_lang']." AS e ON a.idcat = e.idcat WHERE a.parentid IN (".implode(", ", $unterkat).") AND d.idtype = '2' AND d.typeid = '2' AND d.value != '';";
$db->query($sql);
$db->next_record();
$anzahl_artikel = $db->f("anzahl");

if ($anzahl_artikel > 0) {
	$sql = "SELECT d.value, b.idart, b.idcat, e.name FROM ".$cfg['tab']['cat']." AS a LEFT JOIN ".$cfg['tab']['cat_art']." AS b ON a.idcat = b.idcat LEFT JOIN ".$cfg['tab']['art_lang']." AS c ON b.idart = c.idart LEFT JOIN ".$cfg['tab']['content']." AS d ON c.idartlang = d.idartlang LEFT JOIN ".$cfg['tab']['cat_lang']." AS e ON a.idcat = e.idcat WHERE a.parentid IN (".implode(", ", $unterkat).") AND d.idtype = '2' AND d.typeid = '2' AND d.value != '';";
	$db->query($sql);

	while ($db->next_record()) {
		$suche = klein($db->f("value"));
		$suchindex = substr($suche, 0, 1);
		$titel = urldecode($db->f("value"));
		$artikel = $db->f("idart");
		$kategorie = $db->f("idcat");
		$abteilung = $db->f("name");

		$gefunden = false;

		foreach ($liste as $value) {
			$wert = ord($suchindex);
			if (($wert > 47) && ($wert < 57))
				$suchindex = "0-9";

			if ($value == $suchindex) {
				$gefunden = true;
				break;
			}
		}

		if ($gefunden) {
			$gesamt[$suchindex][] = array('suche' => $suche, 'titel' => $titel, 'kategorie' => $kategorie, 'artikel' => $artikel, 'abteilung' => $abteilung);
		} else {
			$gesamt['@'][] = array('suche' => $suche, 'titel' => $titel, 'kategorie' => $kategorie, 'artikel' => $artikel, 'abteilung' => $abteilung);
		}
	}

	echo '				<tr><td align="right" colspan="3" class="liste">';
	for ($i = 0; $i < 14; $i++) {
		$text = strtoupper($liste[$i]);

		if (is_array($gesamt[$liste[$i]])) {
			$text = '<a href="#'.$text.'" class="liste">'.$text.'</a>';
		}

		echo $text.'&nbsp;';
	}
	echo '</td></tr>
				<tr><td align="right" colspan="3" class="liste">';
	for ($i = 14; $i < 28; $i++) {
		$text = strtoupper($liste[$i]);

		if (is_array($gesamt[$liste[$i]])) {
			$text = '<a href="#'.$text.'" class="liste">'.$text.'</a>';
		}

		echo $text.'&nbsp;';
	}
	echo '</td></tr>
				<tr><td colspan="3" class="text">Dieses Glossar enth&auml;lt '.$anzahl_artikel.' Artikel.</td></tr>
';

	foreach ($liste as $buchstabe) {
		if (is_array($gesamt[$buchstabe])) {
			sort($gesamt[$buchstabe]);

			$text = strtoupper($buchstabe);

			echo '				<tr><td colspan="3" width="'.$textspalteplus.'"><img src="images/dotclear.gif" width="'.$textspalteplus.'" height="20" alt=""></td></tr>
				<tr>
					<td valign="top" width="'.$breiterand.'">&nbsp;</td>
					<td valign="top" width="'.$breitekomplett.'" valign="top"><a name="'.$text.'"></a>'.$text.'</td>
					<td valign="top" width="'.$breiterand.'">&nbsp;</td>
				</tr>
';

			foreach ($gesamt[$buchstabe] as $eintrag) {
				$link = $sess->url("front_content.php?idcat=".$eintrag['kategorie']."&idart=".$eintrag['artikel'].$sessionid);

				echo '				<tr>
					<td valign="top" width="'.$breiterand.'">&nbsp;</td>
					<td valign="top" width="'.$breitekomplett.'" valign="top"><a href="'.$link.'" class="liste_headlinelink">'.$eintrag['titel'].'</a> ('.$eintrag['abteilung'].')</td>
					<td valign="top" width="'.$breiterand.'">&nbsp;</td>
				</tr>
';
			}
		echo '				<tr>
					<td valign="top" width="'.$breiterand.'">&nbsp;</td>
					<td valign="top" width="'.$breitekomplett.'">&nbsp;</td>
					<td valign="top" width="'.$breiterand.'">&nbsp;</td>
				</tr>
';
		}
	}

} else {
	echo '				<tr>
					<td valign="top" width="'.$breiterand.'">&nbsp;</td>
					<td valign="top" align="center" width="'.$breitekomplett.'">Dieses Glossar enth&auml;lt leider noch keine Artikel.</td>
					<td valign="top" width="'.$breiterand.'">&nbsp;</td>
				</tr>
				<tr>
					<td valign="top" width="'.$breiterand.'">&nbsp;</td>
					<td valign="top" width="'.$breitekomplett.'">&nbsp;</td>
					<td valign="top" width="'.$breiterand.'">&nbsp;</td>
				</tr>
';
}

unset ($breiterand);
unset ($breitekomplett);

?>
Edit: Die SQL-Statements wurden korrigiert, da nur die direkten Kategorien unterhalb der Hauptkategorie berücksichtigt wurden. (2005-10-09)

Bei Fragen einfach melden.

Darthbach
Zuletzt geändert von darthbach am So 9. Okt 2005, 12:36, insgesamt 1-mal geändert.
Verwendete Versionen:
Contenido: 4.5.2 ALPHA
PHP: 4.3.10 (Update auf 5 geplant)
MySQL: 3.23.58

Gast

Beitrag von Gast » Mi 23. Mär 2005, 10:36

Kann man das irgendwo im Einsatz sehen?

darthbach
Beiträge: 11
Registriert: Fr 30. Jul 2004, 11:00
Wohnort: Duisburg
Kontaktdaten:

Beitrag von darthbach » Do 24. Mär 2005, 08:00

Hallo.

Leider kann ich nur einen Screenshot anbieten:
http://schmitz-ruhrort.dyndns.org/glossar.jpg (ca. 145 KB)

Edit: Noch ein zweiter Screenshot, der die Struktur zeigen soll: http://schmitz-ruhrort.dyndns.org/glossar2.jpg (ca. 186 KB)
Die Artikel befinden sich unter "News > ..."
Unter "Glossar" befindet sich nur das Glossar!!!!! (2005-10-09)


Darthbach
Zuletzt geändert von darthbach am So 9. Okt 2005, 12:40, insgesamt 2-mal geändert.
Verwendete Versionen:
Contenido: 4.5.2 ALPHA
PHP: 4.3.10 (Update auf 5 geplant)
MySQL: 3.23.58

Gast

Beitrag von Gast » Do 24. Mär 2005, 21:57

Was muss ich als parentid und idtype eintragen?

darthbach
Beiträge: 11
Registriert: Fr 30. Jul 2004, 11:00
Wohnort: Duisburg
Kontaktdaten:

Beitrag von darthbach » Do 24. Mär 2005, 23:31

Meine Site hat folgenden Aufbau:

Code: Alles auswählen

+- News
|  +-Abteilung 1
|  +-Abteilung 2
|  +-Abteilung 3
+- Glossar
Die Artikel werden in den einzelnen Abteilungen abgelegt. Die übergeordnete Kategorie News hat die idcat = 24.
idtype = 2 und typeid = 2 ergibt sich daraus, da in den Artikeln ein Feld CMS_HTML[2] eingebaut ist. _Wenn_ dieses Feld ausgefüllt wird (value != ''), erst dann taucht der Artikel in der Glossarliste aus.

Hier also die eigenen Kategorien eintragen.

Darthbach
Verwendete Versionen:
Contenido: 4.5.2 ALPHA
PHP: 4.3.10 (Update auf 5 geplant)
MySQL: 3.23.58

Gast

Beitrag von Gast » Mi 6. Apr 2005, 09:51

Kann es sein, dass das Modul unter v4.4.5 nicht funktioniert, ich kriege es jedenfalls nicht zum laufen!

Gast

Beitrag von Gast » Mi 6. Apr 2005, 21:52

Anonymous hat geschrieben:Kann es sein, dass das Modul unter v4.4.5 nicht funktioniert, ich kriege es jedenfalls nicht zum laufen!
Ich kenne zwar die Unterschiede nicht so genau, da ich direkt mit der v4.5 begonnen habe.

Du könntest zum Testen alle paar Zeilen auch eine einfache Programmzeile, z.B.

Code: Alles auswählen

echo "1"; ...; echo "2"; ...; 
einfügen.
Dann siehst du ja, wo es Probleme gibt.

Aixtraweb
Beiträge: 100
Registriert: Do 23. Sep 2004, 10:55
Wohnort: Herzogenrath
Kontaktdaten:

Beitrag von Aixtraweb » Fr 15. Apr 2005, 12:15

Anonymous hat geschrieben:Kann es sein, dass das Modul unter v4.4.5 nicht funktioniert, ich kriege es jedenfalls nicht zum laufen!
Ich brauche nur den Code ins Output zu kopieren und Contenido meckert schon den Code an :-(
Ich nutze auch 4.4.5....

Das Modul ist genau das was ich suchte und brauche!

Wer hilft mir das für die 4.4.5 hinzubekommen?
Mit freundlichen Grüßen
Jörg Knörchen

Meine Hobby-Webseite:
www.mein-foto-abc.de : contenido 4.6.15 - I love it! : www.yogie.de : www.bastelstun.de

Gast

Beitrag von Gast » Fr 15. Apr 2005, 13:22

Interesse hätte ich auch, aber ich habe es leider nicht selber hinbekommen. Schön wäre auch, wenn man die Konfiguration nicht im Modul selbst, sondern über die Vorkunfiguration anpassen könnte.

Gesperrt