stichwortindex modifizieren

Gesperrt
spalek
Beiträge: 27
Registriert: Fr 4. Jul 2003, 08:35
Kontaktdaten:

stichwortindex modifizieren

Beitrag von spalek »

hallo,
ich habe auf der contenido homepage das modul "stichwortindex" gefunden.
es funktioniert auch bei der von mir eingesetzten contenido version 4.6.4.

jetzt würde ich das modul aber gerne so nutzen können, das ich ihm sage, stelle nur das erste keyword dar. die restlichen lässt du aussen vor.

und dann ein zweites modul, das nur das zweite keyword ausgibt und die ergebnisse darstellt.

hier das modul:

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     Stichwortindex
* Author          :     Michael Gautschi
* Copyright     :     Michael Gautschi
* Created     :     15.1.04
* Modified    :  
* Version     : 0.1   
************************************************/
// Zuerst herausfinden welcher Metatype "Keywords" sind; normalerweise 5

$sql = "SELECT * FROM ".$cfg["tab"]["meta_type"] . " AS A WHERE A.metatype=\"keywords\"";
$db->query($sql);
if ($db->num_rows()==0) {
   echo "Konnte nicht bestimmen welche Metatags keywords sind";
   }
 else { 
  $db->next_record(); 
  $keywordid=$db->f("idmetatype");

  $sql = "SELECT metavalue,ARTLANG.idlang,ARTLANG.title,ARTLANG.idart,CATART.idcat FROM ".
               $cfg["tab"]["meta_tag"]. " AS META,".
               $cfg["tab"]["art_lang"]. " AS ARTLANG,".
               $cfg["tab"]["cat_art"]. " AS CATART 
               WHERE META.idmetatype = $keywordid
               AND     META.idartlang = ARTLANG.idartlang
               AND     ARTLANG.idart = CATART.idart
               AND     metavalue<>\"\"";

  $db->query($sql);
  if ($db->num_rows() != 0) {
     $entries=array();
     for ($i=0; $i<$db->num_rows(); $i++) {
       $db->next_record();
       $metavalues=$db->f("metavalue");
       $idart=$db->f("idart");
       $idcat=$db->f("idcat");
       $title=$db->f("title");
       $tmp_keywords=split(",",$metavalues);
       foreach ($tmp_keywords as $tmp_keyword) {
         $tmp_keyword=trim($tmp_keyword);
         $entry["idart"]=$idart;
         $entry["idcat"]=$idcat;
         $entry["title"]=$title;
         if ( !(array_key_exists($tmp_keyword,$entries)))  $entries[$tmp_keyword]=array();
         array_push($entries["$tmp_keyword"],$entry);
         }     
       }
     ksort($entries);
     foreach($entries as $keyword=>$items) {
       echo "$keyword<ul>";
       foreach ($items as $item) {
          $navmod_link ="front_content.php?client=$client&lang=$lang&idcat=". $item["idcat"] . "&idart=" . $item["idart"];
          echo ' <li><a href="'.$sess->url("$navmod_link").'" id="font">'.$item["title"].'</a><br> ';
          }
       echo "</ul>";
       }  
     }
   else {
     echo "keine Stichworte gefunden";
     }
  }
?>
kann mir bitte jemand helfen?!

gruß
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

seltsame anforderung...

Code: Alles auswählen

       foreach ($tmp_keywords as $tmp_keyword) { 
         $tmp_keyword=trim($tmp_keyword); 
         $entry["idart"]=$idart; 
         $entry["idcat"]=$idcat; 
         $entry["title"]=$title; 
         if ( !(array_key_exists($tmp_keyword,$entries)))  $entries[$tmp_keyword]=array(); 
         array_push($entries["$tmp_keyword"],$entry); 
         }
ersetzen durch

Code: Alles auswählen

       $number = 1; // das wievielte keyword soll angezeigt werden
       $count = 1; // das nehmen wir als zähler der durchläufe...
       foreach ($tmp_keywords as $tmp_keyword) { 
         if ($number == $count) {
           $tmp_keyword=trim($tmp_keyword); 
           $entry["idart"]=$idart; 
           $entry["idcat"]=$idcat; 
           $entry["title"]=$title; 
           if ( !(array_key_exists($tmp_keyword,$entries))) 
             $entries[$tmp_keyword]=array(); 
           array_push($entries["$tmp_keyword"],$entry);
         }
         $count++;
       }
könnte funktionieren, getestet hab ich es aber nicht...

möchtest du zb nur das zweite ausgeben ändert man den wert bei $number = X;
*** make your own tools (wishlist :: thx)
conny07
Beiträge: 3
Registriert: Do 16. Aug 2007, 08:18
Kontaktdaten:

Modifizierung des Stichwortindex

Beitrag von conny07 »

Hallo

zu dem Stichwortindex-Modul bzw. einer möglichen Modifizierung hätte ich eine Frage: Wäre es möglich, sich bei der Ausgabe nur auf Ergebnisse bestimmter und nicht aller Kategorien zu beschränken?

Leider kenne ich mich mit PHP-Abfragen in Datenbanken nicht aus, müsste man da schon die bestehende SQL-Abfrage umformulieren bzw. nur auf bestimmte Tabellen mehr eingrenzen? Oder könnte man ein Array aufbauen und in das Script integrieren, dass die gewünschten Kategorien bzw. deren IDs beinhaltet und zum Auslesen bereitstellt (das ist nur so ein Gedankensplitter) ?

Wäre für jeden Tipp der Community sehr dankbar.

viele Grüße
conny07
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

das ergebniss auf einzelne oder bestimmte kategorien einzuschränken ist an sich nicht so ein problem...

es gibt dafür zwei möglichkeiten:
entweder das sql query so modifizieren das nur bestimmte idcats erlaubt sind...
sieht dann in etwa so aus:

Code: Alles auswählen

AND CATART.idcat in (10,12,13)
wobei 10,12,13 die erlaubten idcat werte wären...

oder in der schleife dahingehend prüfen ob der idcat wert sich innerhalb eines erlaubten bereichs befindet...
nach dem

Code: Alles auswählen

$idcat=$db->f("idcat"); 
das hier

Code: Alles auswählen

if (!in_array($idcat, Array(10,12,13))) continue();
ergänzen...

ist beides nicht getestet... ist aber der ansatz den ich wählen würde...
*** make your own tools (wishlist :: thx)
conny07
Beiträge: 3
Registriert: Do 16. Aug 2007, 08:18
Kontaktdaten:

Beitrag von conny07 »

:D Danke, der Ansatz mit der sql-Modifizierung hat funktioniert, so sieht es jetzt im Quelltext des Moduls aus ...

Code: Alles auswählen

$sql = "SELECT metavalue,ARTLANG.idlang,ARTLANG.title,ARTLANG.idart, CATART.idcat FROM ".
               $cfg["tab"]["meta_tag"]. " AS META,".
               $cfg["tab"]["art_lang"]. " AS ARTLANG,".
               $cfg["tab"]["cat_art"]. " AS CATART 
               WHERE META.idmetatype = $keywordid
               AND     META.idartlang = ARTLANG.idartlang
               AND     ARTLANG.idart = CATART.idart
               AND     CATART.idcat in (21,22,23,24,25,26,27,29,30,31,32,33,34,35)
               AND     metavalue<>\"\"";
Gesperrt