Artikel wie ein Lexikon darstellen und darin Navigieren...

YAY
Beiträge: 14
Registriert: Mi 28. Mär 2007, 22:46
Kontaktdaten:

problem mit glossar für Contenido gelöst

Beitrag von YAY » Mo 4. Jun 2007, 23:27

Hallo zusammen,

nun habe ich es endlich geschafft die Glossarliste zum laufen gebracht,
war ein Dummer Fehler von mir :x , ich hatte zwar Artikel angelegt aber hatte in den Artikeln keinen Inhalt z. B. Überschriften und Text.
ich habe da aber noch folgenden Wunsch: Die Artikel sollen Wie folgt aufgebaut sein:
  • A (soll nicht mit Link hinterlegt sein)
    Artikel 1 (wie bisher verlinkt)
    Artikel 2 (auch verlinkt)
  • B (soll nicht mit Link hinterlegt sein)
    Artikel 1 (wie bisher verlinkt)
    Artikel 2 (auch verlinkt)
etc...

Ich benutze momentan die optimierte css Datei, Ich habe aber gesehen das bei (Mc) diese Variable dies tut ($eintrag['abteilung'].) aber leider in der css Datei nicht vorhanden ist. Wo oder wie kann ich die Variable einsetzen damit ich den effekt bekomme wie oben beschrieben?

oder gibt es da einen anderen Trick?

Gruß YAY

daniello1
Beiträge: 25
Registriert: Mi 27. Dez 2006, 19:20
Wohnort: Hamburg
Kontaktdaten:

Beitrag von daniello1 » Mi 20. Jun 2007, 17:21

Hey YAY,

bei Dir scheint das Glossar ja schon besser zu laufen als bei mir. Bei mir steht immer nur der Text "Dieses Glossar enthält leider keine Artikel".

Welches Template hast Du den Unterkategorien zugewiesen? Ich habs mit "Glossar", "Kein" und nem Standardtemplate versucht, jeweils mit Textinhalten. Immer kein Resultat...

Kategorien:

Glossar (Template Glossar)
- Unterkat A (Diverse probiert)
- Unterkat B
- Unterkat C

Kannst Du mir einen Tipp geben woran es liegen könnte?

Vielen Dank fürs Feedback im Voraus.

/daniello

YAY
Beiträge: 14
Registriert: Mi 28. Mär 2007, 22:46
Kontaktdaten:

Glossar

Beitrag von YAY » Mi 20. Jun 2007, 18:12

Hallo daniello1,

Hier ganz einfach:

Du legst unter "Content/Kategorie" folgenden Ordner an: A - Z dann gibst du diesen Ordner das Standard Template, der Ordner muss Online sein.
Unter diesem Ordner legst du erneut einen Ordner an z. B. "Glossar" diesen Ordner weist du das Template Glossar zu, muss auch Online sein.

Jetzt gehst du zu "Content/Artikel" und legst einen Artikel bei "A - Z" an den nennst du z. B. "Produkte von A - Z", muss Online sein, als Startartikel und das Template glossar haben.

Zum Unterordner "Glossar" und dort beliebig viele Artikel anlegen die du praktisch Alphabetisch sortiert haben möchtest. Alle Artikel die du dort anlegst haben das Template Standard zugewiesen bekommen und sind ebenfalls Online.

Bitte beachte das du bei den Artikeln ebenfalls eine Überschrift und Text einpflegst, sonnst erscheint auch deine Fehlermeldung wenn kein Text und Überschrift den Artikeln zuweist.

Der Glossar setzt anschließend alle Artikel der Reihe Nach an, so das Sie Alphabetisch sortiert werden und Jeweils den Ersten Buchstabe als Kategorie anzeigt. Z. B.:

A
Audi
Alpha Romeo

V
Volvo
VW

usw....

Was du auch noch beachten musst:

$parentcatid = 155;
$cmstypeid = 1;
$numberofcmstype = 1;

diese 3 Variablen musst du auch noch in dein Module anpassen.
wichtig ist die Erste: 155 ist bei mir die Rubrikennummer "idcat" vom Ordner "A - Z" das kannst du ganz einfach herausbekommen indem du auf "Content/Artikel" gehst und mit der Maus über den Ordner "A - Z" hälst, dann bekommst du die Rubriken Nummer zu sehen und diese musst du dann in "$parentcatid = ***;" eintragen.
Bei den Anderen Variablen einfach ausprobieren ob mit 1 oder 2 läuft. Ich meine "$cmstypeid = 1;" steht dafür das man die Überschriften anzeigen möchte oder nicht. (vielleicht kann das jemand anderes hier korigieren falls ich verkehrt liege)

Ich hoffe das mit den Glossar klappt dann auch.

Bei mir läuft das einwandfrei jetzt.

Falls noch verbesserungsvorschläge da sind, bitte hier noch eintragen.

Gruß YAY

daniello1
Beiträge: 25
Registriert: Mi 27. Dez 2006, 19:20
Wohnort: Hamburg
Kontaktdaten:

Beitrag von daniello1 » Do 21. Jun 2007, 16:22

Hey YAY,

super, vielen Dank für Deine detaillierte Hilfe. Es klappt ausgezeichnet. Ich werde jetzt erstmal die Styles etc anpassen und das Glossar mit Leben füllen. Wenn ich noch verbesserungswürdige Modifikationen haben oder vornehmen sollte, poste ich diese dann hier....

Danke!

Viele Grüße
daniello

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus » Do 19. Jul 2007, 16:38

Sagt mal Leute, hat das Glossar auch die Funktion, das es alle im Glossar enthaltenen Begriffe (Fremdwörter) markieren kann, oder ist das nur eine Liste von Glossar-Wörtern, die separat aufgerufen werden muss?

Ich habe mal ein JavaScript geschrieben, das den Inhalt der Seite nach Glossar-Begriffen durchparst, und diese dann z.B. Farbig hervorhebt. Bei nem Klick darauf, geht dann ein Popup-Fenster auf, das die Erklärung des Begriffs enthält.

Ist das Modul auch so aufgebaut? Sonst muss ich nochmal in meiner Script-Kiste kramen, ob ich das Script irgendwo finde :)

daniello1
Beiträge: 25
Registriert: Mi 27. Dez 2006, 19:20
Wohnort: Hamburg
Kontaktdaten:

Beitrag von daniello1 » Do 19. Jul 2007, 18:19

Hey rethus,

nein, dieses Modul ist nicht so aufgebaut. Man kann lediglich den Buchstaben und dann den Begriff auswählen. Jeder Begriff muss als einzelner Artikel unter dem Hauptmenüpunkt (Kategorie) angelegt werden.

Eine Erweiterung wie von Dir beschrieben wäre natürlich klasse. Sprich dann würden sämtlich Begriffe im Content auf Existenz im Glossar geprüft werden und ggf. mit einem Popup mit der entsprechenden Erklärung verlinkt?

MfG
Daniel

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus » Fr 20. Jul 2007, 13:24

Ja, genau so.
Wusste aber nicht, das das Glossar derzeit so umständlich zu befüllen ist (jeder Begriff ein Artikel im Backend).

Wenn Ihr Lust und Laune habt, können wir den Glossar ja so aufbohren, das folgende Funktionen gegeben sind:

Glossar / FAQ-Modul
  • Benutzer können neue Fragen stellen, die im Backend landen und dort beantwortet werden können (bei Beantwortung automatisch Mail an Fragensteller)
  • Über AN/AUS-Button im Frontend, kann man den Glossar einschalten inkl. Keyword-Highlighting (hab ich schon in Javascript programmiert)
  • Als Plugin Programmieren, damit die Eingabe über eine Benutzerfreundliche Eingabemaske erfolgen kann (und nicht jeder Artikel separat in einer Kategorie liegen muss)
Gerne stelle ich dafür mein Glossar-Javascript zur Verfügung.

Was haltet Ihr von der Idee? Wer ist beim Glossar-Entwickler-Team dabei :lol:

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus » Fr 20. Jul 2007, 14:03

Hier poste ich jetzt mal den Link zu meinem Glossar-Script, damit Ihr Euch eine Vorstellung machen könnt.

Anleitung:
  • Oben einfach auf Glossar anzeigen Klicken markiert in der Seite alle im Glossar vorhandnen Suchwörter
  • Nochmals draufklicken deaktiviert das Highlighting
  • Im Script kann man einstellen, ob Case-Sensitiv, oder nicht
  • Ist das Glossar-Fenster einmal offen, wechselt der Inhalt entsprechend den angeklickten Keywords
  • schließt man das Fenster, öffnet es sich wieder bei erneutem Klick auf ein Keyword.
Und Hier der Link: http://www.suther.de/tools/suchen.html#

Funktioiniert in:
Firefox 1.5; 2.0
IE 6; IE 5.5

Eingeschränkte Funktion:
Konqueror 3.5.6:
Fenster wieder schließen über Link "Glossar anzeigen" geht nicht
IE 5.0
Popup-Fenster (Div-Layer) geht nicht auf

Nähere Infos zu den ToDo's für das Script sind auf der Seite selbst noch zu finden.

PS: Bitte weitere Rückmeldungen bezüglich Browser-Kompatibilität hier posten

kreativsteffi
Beiträge: 40
Registriert: Di 13. Mär 2007, 14:21
Wohnort: Jena
Kontaktdaten:

Beitrag von kreativsteffi » Do 9. Aug 2007, 00:27

Hallo
ich habe jetzt die Glossarliste von Cym eingebaut mit externer CSS-Datei. Ich kann leider auch nichts bei ABC anklicken und ich möchte auch, dass das ABC auch bei Anklicken eines Artikels da ist. Oder ist das net möglich? Bin kein Programmierer und könnte mich auch mit einem Zurückbutton zufriedenstellen. Obwohl ja dann das Glossar eher sinnlos ist, weil es immer nur auf die Hauptseite zurückgeht, wo unter dem ABC die einzelnen Kategrorien mit Unterartikeln zu sehen sind.

So mal als Beispiel, wo das alles gut hinhaut:
http://glossar.ub.uni-kl.de/

Wäre schön, wenn mir da jemand helfen könnte.
LG und danke im vorraus Steffi

kreativsteffi
Beiträge: 40
Registriert: Di 13. Mär 2007, 14:21
Wohnort: Jena
Kontaktdaten:

Beitrag von kreativsteffi » Do 9. Aug 2007, 11:52

ok, ich habe es mittlerweile hingekriegt, dass das Glossar auch bei den angeklickten Artikeln zu sehen sind und auch ein Zurückbutton existiert, aber die Verlinkung des ABC (Bsp: Klick auf A und alle Artikel mit "A" werden angezeigt) funktioniert immernoch nicht und ich weiß auch nicht, wie ich das machen kann.

Hat da jemand ne Idee?
Liebe Grüße Steffi

kreativsteffi
Beiträge: 40
Registriert: Di 13. Mär 2007, 14:21
Wohnort: Jena
Kontaktdaten:

Beitrag von kreativsteffi » Sa 11. Aug 2007, 00:23

Hat keiner ne Idee, warum die Verlinkung von ABC nicht funktioniert?

Hier mal mein Output:

Code: Alles auswählen

<?php

$parentcatid = 11;
$cmstypeid = 1;
$numberofcmstype = 1;

echo "<!-- Modul: Glossarliste -->\n";
echo "<div id='glossar'>";


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 = 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($parentcatid);

// 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 = '".$cmstypeid."' AND d.typeid = '".$numberofcmstype."' 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 = '".$cmstypeid."' AND d.typeid = '".$numberofcmstype."' 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);
      }
   }
 
   $quickLinks = "";
 
   for ($i = 0; $i < 28; $i++) {
      $text = strtoupper($liste[$i]);

      if (is_array($gesamt[ $liste[$i] ])) {
        $quickLinks .= "<li><a href=\"front_content.php?idcat=".$parentcatid."#".$text."\" class=\"glossar\">".$text."</a></li>";
      } else {
         $quickLinks .= "<li>".$text."</li>";  
 
      }
   }
      echo "<ul id='glossarQuicklinks'>".$quickLinks."</ul>".
          "<br /><p>Dieses Glossar enth&auml;lt ".$anzahl_artikel." Artikel</p>";
         
         /******
       *** Einträge
       ******/
   echo "<ul id='glossarEintraege'>";

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

         $text = strtoupper($buchstabe);
         
         echo "<li id=".$text.">".$text."</li>";
      
         foreach ($gesamt[$buchstabe] as $eintrag) {
            $link = $sess->url("front_content.php?idcat=".$eintrag['kategorie']."&idart=".$eintrag['artikel'].$sessionid);
         
         echo "<li><a href=".$link." class='glossar_headlinelink'>".$eintrag['titel']."</a></li>";
         }
      }
   }
   echo "</div>"; // close div glossarEinträge

} else {
   echo "<div id=\"glossarEintraege\">Dieses Glossar enth&auml;lt leider noch keine Artikel.</div>";
}

unset ($breiterand);
unset ($breitekomplett);
echo "</div>";
?> 
LG Steffi

benja
Beiträge: 168
Registriert: Mi 31. Aug 2005, 10:54
Wohnort: Köln
Kontaktdaten:

Re: Artikel wie ein Lexikon darstellen und darin Navigieren...

Beitrag von benja » So 19. Jul 2009, 01:22

Hallo,

das Glossar wird leider nicht bei der Suche berücksichtigt. Hat jemand eine Lösung dafür? Ich könnte mir zwei Möglichkeiten vorstellen:

1. Die gesamte Kategorie die auf Offline steht soll durchsucht werden.

Mit 'protected' => false); im Search_Output Modul werden leider alle Kategorien die auf Offline stehen durchsucht, was ich nicht für sinnvoll halte.

2. Die einzelnen Artikel werden in derselben Kategorie angelegt wie das Glossar selbst.

Da ich mich zu wenig mit php auskenne kann ich das leider nicht umsetzen! Kann mir bitte jemand helfen?

Hier noch das Modul dass ich abgeändert habe. Contenido 4.8.12, AMR.

Modul-Output:

Code: Alles auswählen

<?php 

$parentcatid = 12; 
$cmstypeid = 1; 
$numberofcmstype = 1; 

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; 



$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($parentcatid); 

// 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 = '".$cmstypeid."' AND d.typeid = '".$numberofcmstype."' 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 = '".$cmstypeid."' AND d.typeid = '".$numberofcmstype."' 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 '<div id="gl_abc">'; 
   for ($i = 0; $i < 14; $i++) { 
      $text = strtoupper($liste[$i]); 

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

      echo $text.'&nbsp;&nbsp;'; 
   } 
   echo '</div>';
   echo '<div id="gl_abc">'; 
   for ($i = 14; $i < 28; $i++) { 
      $text = strtoupper($liste[$i]); 

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

      echo $text.'&nbsp;&nbsp;'; 
   } 
   echo '</div>';
   echo '<div id="gl_text">Dieses Glossar enth&auml;lt '.$anzahl_artikel.' Artikel.</div>'; 

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

         $text = strtoupper($buchstabe); 

         echo '<div id="gl_kat"><a name="'.$text.'"></a>'.$text.'</div>'; 

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

            echo '<div id="gl_headline"><h2><a href="'.$link.'">'.$eintrag['titel'].'</a></h2></div> '; 
         } 
      echo ''; 
      } 
   } 

} else { 
   echo '<div id="gl_text">Dieses Glossar enth&auml;lt leider noch keine Artikel.</div>'; 
} 



?>
CSS:

Code: Alles auswählen

/*Glossar*********************************************************/
#gl_abc {
    margin-bottom: 5px; 
    font-size: 14px;
}
#gl_abc a {
    margin-bottom: 5px; 
    font-size: 14px;
    font-weight: bold;
}
#gl_headline h2 {
    color: #fff;
    font-size: 11px;
    margin-bottom: 3px;
    display:block;
    font-weight: normal;
    }
#gl_text {
    border-top-width: 1px;
    border-top-style: solid;
    border-top-color: #ccc;
    color: #000000;
    margin-top: 16px;
    margin-bottom: 6px;
    padding-top: 6px;
}
#gl_kat {
    color: #000000;
    margin-top: 10px;
    margin-bottom: 6px;
    font-weight: bold;
    border-top-width: 1px;
    border-top-style: solid;
    border-top-color: #ccc;
}

LG Benja
Dateianhänge
Glossar.png
Ansicht
Glossar.png (22.03 KiB) 9314 mal betrachtet

Fips
Beiträge: 105
Registriert: Fr 20. Feb 2009, 09:55
Kontaktdaten:

Re: Artikel wie ein Lexikon darstellen und darin Navigieren.

Beitrag von Fips » Mi 10. Nov 2010, 09:00

Hallo benja,
ich habe das Modul mal eingebaut und es funktioniert, nur das die Artikel doppelt ausgegeben werden. Ich arbeite mit der Version 4.8.13.

Hast du eine Idee, woran dies liegen kann?

Fips

benja
Beiträge: 168
Registriert: Mi 31. Aug 2005, 10:54
Wohnort: Köln
Kontaktdaten:

Re: Artikel wie ein Lexikon darstellen und darin Navigieren.

Beitrag von benja » Mi 10. Nov 2010, 09:04

Hi Fips,

sorry, keine Ahnung. Ich habe es aber mit dieser Version im Einsatz, deshalb kann es eigentlich nicht am Modul liegen.

LG
benja

andy-man
Beiträge: 166
Registriert: Di 25. Nov 2003, 11:29
Wohnort: Oberstaufenbach
Kontaktdaten:

Re: Glossar-Liste für 4.8.14

Beitrag von andy-man » Di 30. Nov 2010, 14:42

Hallo,
leider hatten wir auch die doppelte Darstellung der Artikel bei der Ausgabe im Glossar. Wir haben Contenido 4.8.14 im Einsatz.
Die Ursache lag am Auslesen der MySQ-Daten. Wir haben dies korrigiert indem wir den operator DISTINCT eingebaut haben.
Den neuen Parameter $glossarcatid haben wir hinzugefügt, das die Ankerlinks der Buchstaben funktionieren (auch mit mode_rewrite), hier wird die idcat des Glossarartikels eingeben. Somit kann der Glossarartikel in einer x-beliebigen Rubrik stehen und auf eine andere Rubrik auslesen.

Hier das angepasste Modul:

Code: Alles auswählen

<?php

$parentcatid = 1;
$cmstypeid = 1;
$numberofcmstype = 1;
$glossarcatid = 154;

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 distinct 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; 

$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($parentcatid);

// liest die anzahl betroffener artikel aus der datenbank
$sql = "SELECT count(distinct d.value) 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 = '".$cmstypeid."' AND d.typeid = '".$numberofcmstype."' AND d.value != '';";
$db->query($sql);
$db->next_record();
$anzahl_artikel = $db->f("anzahl");

if ($anzahl_artikel > 0) {
   $sql = "SELECT distinct 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 = '".$cmstypeid."' AND d.typeid = '".$numberofcmstype."' 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 '<div id="gl_abc">';
   for ($i = 0; $i < 14; $i++) {
      $text = strtoupper($liste[$i]);

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

      echo $text.'&nbsp;&nbsp;';
   }
   echo '</div>';
   echo '<div id="gl_abc">';
   for ($i = 14; $i < 28; $i++) {
      $text = strtoupper($liste[$i]);

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

      echo $text.'&nbsp;&nbsp;';
   }
   echo '</div>';
   echo '<div id="gl_text">Dieses Glossar enth&auml;lt '.$anzahl_artikel.' Artikel.</div>';

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

         $text = strtoupper($buchstabe);

         echo '<div id="gl_kat"><a name="'.$text.'"></a>'.$text.'</div>';

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

            echo '<div id="gl_headline"><h2><a href="'.$link.'">'.$eintrag['titel'].'</a></h2></div> ';
         }
      echo '';
      }
   }

} else {
   echo '<div id="gl_text">Dieses Glossar enth&auml;lt leider noch keine Artikel.</div>';
}

?>
Hier im Einsatz: http://www.abs-ag.de/glossarliste.html

andy-man

Gesperrt