Kategoriemodul

Tom Quenten
Beiträge: 125
Registriert: Do 10. Jun 2004, 13:55
Wohnort: Gallinchen
Kontaktdaten:

Kategoriemodul

Beitrag von Tom Quenten » Do 24. Jun 2004, 15:15

Hallo Contenido Freunde,

ich sitze hier und überlege mir wie man am einfachsten eine Kategoriebeschreibung realisieren kann. Die Kategorien werden ja in der Navi ausgegeben. Clickt man nun eine Kategorie an möchte ich im oberen Teil der Seite eine Kategoriebeschreibung bzw. eine kurze Zusammenfassung darstellen. Dazu lassen sich die Startartikel wunderbar verwenden. Darunter sollen aber die Kategoriebeschreibungen (also dessen Startartikel) der unmittelbar darunter liegenden Unterkategorien ausgegeben werden. (untereinander oder nebeneinander)

Dazu habe ich schon einen guten Ansatzpunkt gefunden. Das Modul w3concepts.ukatlist von w3concepts.net tut ja schon so ziemlich das was ich machen möchte. Es müsste jedoch abgeändert werden das nur die unmittelbar darunter liegenden Unterkategorien ausgegeben werden und nur die dazugehörigen Startartikel.

Input Code

Code: Alles auswählen

***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname   :	    w3concepts.ukatlist.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     06-08-2004
* Modified    :     06-08-2004
************************************************/


$selected = "CMS_VALUE[0]";

echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\"><tr valign=\"top\"><td>Kategorie wählen:</td><td><select name=\"CMS_VAR[0]\">";

if($selected!="0" && $selected!=""){
    echo"<option value=\"0\">--- kein ---</option>";
} else {
    echo"<option selected=\"selected\" value=\"0\">--- kein ---</option>";
}

$sql = "
    SELECT a.idcat, a.level, c.name
    FROM {$cfg['tab']['cat_tree']} AS a,
         {$cfg['tab']['cat']} AS b,
         {$cfg['tab']['cat_lang']} AS c
    WHERE
        a.idcat = b.idcat
        AND b.idcat = c.idcat
        AND c.idlang='$lang'
        AND b.idclient='$client'
        AND c.visible = 1
    ORDER BY a.idtree
    ";

$db->query($sql);

while ($db->next_record()) {
    $spaces = "|";
    $levels = $db->f("level");
    for ($i = 0; $i < $levels; $i ++) {
        $spaces = $spaces . "--";
    }
    $spaces .= ">";

    if ($selected == $db->f("idcat")) {
        echo "<option selected=\"selected\" value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>";
    } else {
        echo "<option value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>";
    }
}

echo "</select></td></tr>";
echo "</table>";
Output Code

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     w3concepts.ukatlist.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     06-09-2004
* Modified    :     06-09-2004
************************************************/

// konfiguration
$categorie = "CMS_VALUE[0]";

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

// liest die unterkategorien aus der datenbank
$sql = "
	SELECT a.idcat, b.name FROM {$cfg['tab']['cat']} AS a
	LEFT JOIN {$cfg['tab']['cat_lang']} AS b ON a.idcat = b.idcat
	WHERE
		b.idlang = $lang
		AND a.parentid = $categorie
	ORDER BY b.name
	";

$db->query($sql);
    
while ($db->next_record()) {
	$categorie = $db->f("idcat");
	// liest die anzahl artikel aus der datenbank
	$sql2 = "
		SELECT count(*) AS anzahl
	                FROM {$cfg['tab']['cat']} AS a,
	                     {$cfg['tab']['cat']} AS b,
	                     {$cfg['tab']['cat']} AS c
	                LEFT JOIN {$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
	                LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
	                WHERE
	                    (
	                        (
	                            c.parentid = b.idcat
	                            AND b.parentid = a.idcat
	                        )
	                        OR
	                        (
	                            c.idcat = b.idcat
	                            AND b.parentid = a.idcat
	                        )
	                        OR
        	                (
	                            c.idcat = b.idcat
                	            AND b.idcat = a.idcat
	                        )
	                    )
	                    AND a.idcat = $categorie
	                    AND e.online = 1
	                    AND e.redirect = 0
	                    AND e.external_redirect = 0
	                    AND e.idlang = $lang
	         ";

	$db2->query($sql2);
	$db2->next_record();

	$unterkategorie[$db->f("name")] = array($db2->f("anzahl"),$sess->url("front_content.php?client=$client&lang=$lang&idcat=".$db->f("idcat")));
}

// ausgabe an den schirm
echo "<p>";
foreach ($unterkategorie as $bezeichner => $details) {
	echo "<a href=\"{$details[1]}\">{$bezeichner} ({$details[0]})</a><br/>";
}
echo "</p>";
?>
Wer kann mir hier helfen. Schön wäre auch das auskommentieren für Anfänger, der blanke geänderte Code ist zwar toll aber ich will es ja auch verstehen was hier passiert.

Danke für jegliche Hilfe

Tom Quenten
Beiträge: 125
Registriert: Do 10. Jun 2004, 13:55
Wohnort: Gallinchen
Kontaktdaten:

Beitrag von Tom Quenten » Do 24. Jun 2004, 22:21

Mhhhhh, kann mir niemand helfen dabei?????

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

Beitrag von Halchteranerin » Do 24. Jun 2004, 22:55

Ein bisschen Zeit sollst Du den Leuten schon geben, manche muessen auch noch Geld verdienen. :lol: Andreas (kummer) ist in der Regel ganz fix, was auch sehr lobenswert ist, aber man sollte auch Verstaendnis haben, wenn er mal nicht sofort antworten kann/will. Schliesslich helfen hier alle freiwillig ... und Dein Problem ist keines, welches man in 2 Minuten loest ...

Also uebe Dich etwas in Geduld. :)

Tom Quenten
Beiträge: 125
Registriert: Do 10. Jun 2004, 13:55
Wohnort: Gallinchen
Kontaktdaten:

Beitrag von Tom Quenten » Fr 25. Jun 2004, 09:17

Hallo Halchteranerin,

es war nicht böse gemeint, und ich wußte nicht das sich das so schwirig darstellen kann. Ich hatte aber schon Zweifel das es sich nicht lösen lässt, aber jetzt wo ich mitbekommen habe das es wohl doch ganz schön kompliziert ist warte ich auch gern.

Ja ich bin auch dankbar denjenigen, die mir Anfänger hier versuchen zu helfen, ganz klar!!! :roll:

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Fr 25. Jun 2004, 10:22

ich werds anschauen. aber ich kann nicht garantieren, dass ich heute noch dazu komme. könnte auch nächste woche werden...

neben geld lockt nämlich auch ein sonniges wochenende :lol:
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

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

Beitrag von Halchteranerin » Fr 25. Jun 2004, 10:30

kummer hat geschrieben:auch ein sonniges wochenende :lol:
darauf hoffe ich auch noch, denn angeblich soll's zum WE schoen werden, aber hier ist gerade a...kalt und es regnet wieder mal in Stroemen. :cry:

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Fr 25. Jun 2004, 10:38

bei uns hat sich die sonne bereits durchgesetzt bei angenehmen 23 °C im schatten...
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Fr 25. Jun 2004, 10:53

@tom

das modul liest tatsächlich nur eine ebene unterkategorien ein. nur bei der angabe der anzahl artikel in der jeweiligen kategorie wird in die tiefe gegangen.

du müsstest mir schon genauer sagen, wie das ganze aussehen soll. am besten du machst einen artikel in dem du rein statisch das ganze mal abbildest. dann sehe ich genau, wie die ausgabe aussehen soll. dann einfach den link hier publizieren.

hier inzwischen der code etwas besser auskommentiert:

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     w3concepts.ukatlist.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     06-09-2004
* Modified    :     06-09-2004
************************************************/

// konfiguration
$categorie = "CMS_VALUE[0]";

// instanziierung db-klassen
$db = new DB_Contenido;
$db2 = new DB_Contenido;

// liest die unterkategorien aus der datenbank
$sql = "
	SELECT a.idcat, b.name FROM {$cfg['tab']['cat']} AS a
	LEFT JOIN {$cfg['tab']['cat_lang']} AS b ON a.idcat = b.idcat
	WHERE
		b.idlang = $lang
		AND a.parentid = $categorie
	ORDER BY b.name
	";

// abesetzen des queries auf die datenbank
$db->query($sql);

// nächste zeile aus der datenbank lesen, bis kein weiterer eintrag folgt
while ($db->next_record()) {

	// der variablen $categorie die aus der db ausgelesene idcat zuordnen
	// (zur verwendung in untenstehenden query)
	$categorie = $db->f("idcat");

	// liest die anzahl artikel aus der datenbank
	$sql2 = "
		SELECT count(*) AS anzahl
	                FROM {$cfg['tab']['cat']} AS a,
	                     {$cfg['tab']['cat']} AS b,
	                     {$cfg['tab']['cat']} AS c
	                LEFT JOIN {$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
	                LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
	                WHERE
	                    (
	                        (
	                            c.parentid = b.idcat
	                            AND b.parentid = a.idcat
	                        )
	                        OR
	                        (
	                            c.idcat = b.idcat
	                            AND b.parentid = a.idcat
	                        )
	                        OR
        	                (
	                            c.idcat = b.idcat
                	            AND b.idcat = a.idcat
	                        )
	                    )
	                    AND a.idcat = $categorie
			    AND d.is_start = 0
	                    AND e.online = 1
	                    AND e.redirect = 0
	                    AND e.external_redirect = 0
	                    AND e.idlang = $lang
	         ";

	// absetzen des queries
	$db2->query($sql2);

	// nächsten eintrag aus der db lesen (in diesem fall den ersten eintrag)
	$db2->next_record();

	// dem assoziativen array $unterkategorie die anzahl artikel sowie den link zuordnen
	$unterkategorie[$db->f("name")] = array($db2->f("anzahl"),$sess->url("front_content.php?client=$client&lang=$lang&idcat=".$db->f("idcat")));
}

// ausgabe an den schirm
echo "<p>";

// durch jede unterkategorie laufen, wobei der assoziative array
// in die variablen $bezeichner und $details aufgelöst wird
foreach ($unterkategorie as $bezeichner => $details) {

	//ausgabe der kategoriebezeichnung, der anzahl artikel in der kategorie
	echo "<a href=\"{$details[1]}\">{$bezeichner} ({$details[0]})</a><br/>";

}
echo "</p>";
?>
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

Tom Quenten
Beiträge: 125
Registriert: Do 10. Jun 2004, 13:55
Wohnort: Gallinchen
Kontaktdaten:

Beitrag von Tom Quenten » Fr 25. Jun 2004, 12:45

Hallo Andreas,

danke für die fixe Antwort. Du kannst ja mal schauen unter http://www.tlcc.de/index.php?site=35&sess=&id=76.

Im oberen Teil habe ich dort immer der jeweiligen Kategorie eine kurze Beschreibung, Hintergründe, etc. zuordnen können. Genau darunter sollten dann die Unterkategorien aufgelistet werden mit ebenfalls einer kurze (abgespeckten) Beschreibung. Dies könnte man soweit wie ich das Contenido System im Aufbau bisher verstanden haben, wohl mit den Startartikeln lösen. Wenn du auf meiner jetzigen Seite also auf einen von den gelisteten Unterkats clickst, siehst du die Beschreibung die in der "Vorschau" angezeigt wurde dann wieder oben unter dem Kategoriebild. Darunter wird dann wie oben beschrieben wieder die tiefergelegenen Unterkategorien aufgelistet. So kann sich der User dann "durchhangeln".

Ich habe zwar jetzt auch ein CMS im Einsatz, welches aber nicht mehr weiterentwickelt wird und auch ganz schnell an die Grenzen stößt. Das Contenido gefiel mir da gleich auf Anhieb weil man dort auch noch eigene sachen einbinden kann. Da will ich mich dann auch mal drann probieren.

Ich hoffe die Infos helfen dir jetzt ein wenig weiter...
Mach kein Streß, ich habe Zeit!

Übrgens, die Infos im Quelltext helfen auch schon das besser zu verstehen. Ich habe zwar auch schon mal einiges mit php und sql gemacht allerdings noch nie Objektorientiert. Wo kann ich denn z.b. eine Variblenübersicht finden ala {$cfg['tab']['cat']}??? Die Datenbankstruktur habe ich schon, aber nix wo die Variblen aufgeführt sind.

Bei uns ist übrigens im Moment "weltuntergang", nix da mit Sonne... :cry:

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Fr 25. Jun 2004, 13:40

ich muss gestehen, ich sehe noch immer nicht ganz durch. allerdings bin ich mir sicher, dass es sich machen lässt.

zuerst einmal ein modul, das dir zeigt, welche variablen du im kontext eines moduls zur verfügung hast.

(von timo abgekupfert... :oops: )

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     w3concepts.showglobals.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     06-25-2004
* Modified    :     06-25-2004
************************************************/

echo '
	<h1>Verfügbare Globale Variablen</h1>
	<p>Folgende Variablen stehen im Kontext eines Moduls ohne Zugriff auf die Datenbank zur Verfügung:</p>
	';

echo "
	<p>
		<pre>";
var_dump($GLOBALS);
echo "
		</pre>
	</p>
	";
?>
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Fr 25. Jun 2004, 13:47

und zweitens folgendes: könntest du mir eine kommtentierte html-ausgabe zusammenbasteln, genau so, wie's dann aussehen soll. also nur den bereich, der durch das modul ausgegeben werden soll.

ich stelle mir das etwas so vor:

Code: Alles auswählen

<p>
	<div>unterkateogorie1</div>
	<div>beschreibung der unterkategorie1. dieser text wird aus der kurzbeschreibung (artikeleinstellungen) ausgelesen und hier dargestellt.</div>
	<div><a href="link auf unterkategorie1">mehr...</a></div>
</p>

<p>
	<div>unterkateogorie2</div>
	<div>beschreibung der unterkategorie2. dieser text wird aus der kurzbeschreibung (artikeleinstellungen) ausgelesen und hier dargestellt.</div>
	<div><a href="link auf unterkategorie2">mehr...</a></div>
</p>

<p>
	<div>unterkateogorie3</div>
	<div>beschreibung der unterkategorie3. dieser text wird aus der kurzbeschreibung (artikeleinstellungen) ausgelesen und hier dargestellt.</div>
	<div><a href="link auf unterkategorie3">mehr...</a></div>
</p>
könntest du das machen?

ich würde übrigens die kategoriebeschreibung wenn möglich aus den artikeleinstellungen lesen wollen. dann bist du nämlich völlig frei, wie der inhalt der ersten seite der kategorie ist (also nicht aus dem artikelinhalt teasern).
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

Tom Quenten
Beiträge: 125
Registriert: Do 10. Jun 2004, 13:55
Wohnort: Gallinchen
Kontaktdaten:

Beitrag von Tom Quenten » Fr 25. Jun 2004, 15:30

Danke Andreas!

Das kleine Modul gibt ne ganze Menge aus, Weekend ist wieder gerettet. :lol:

Hier die HTML Ausgabe, so in etwa stelle ich mir das vor. Das mit den Artikeleinstellungen ist sicher auch eine gute Idee. Ich habe da mal reingeschaut, und bin da auf eine textarea gestoßen das zusammenfassung heißt. Meintest du das? Bin mir nicht sicher, aber ich denke das mit den Startartikeln ist besser, oder ich verstehe nicht ganz was du damit meintest.

Code: Alles auswählen

<table border="0" cellpadding="0" cellspacing="0" width="100%">

<!-- start Kategoriename -->
  <tr>
    <td width="100%">Kategoriename</td>
  </tr>
<!-- ende Kategoriename -->

<!-- start startartikel der aktiven Kategorie -->
  <tr>
    <td width="100%">image [x]</td>
  </tr>
  <tr>
    <td width="100%">beschreibung [x]</td>
  </tr>
  <tr>
    <td width="100%"><a href="link">weiter</a></td>
  </tr>
  <!-- ende startartikel der aktiven Kategorie -->
  
  <tr>
    <td width="100%"></td>
  </tr>
  
<!-- start startartikel der ersten Unterkategorie -->
  <tr>
    <td width="100%">Unterkategoriename 1 sowie Unterkategori-image 1</td>
  </tr>
  <tr>
    <td width="100%">beschreibung [x]</td>
  </tr>
  <tr>
    <td width="100%"><a href="link">weiter</a></td>
  </tr>  
<!-- ende startartikel der ersten Unterkategorie -->

  <tr>
    <td width="100%"></td>
  </tr>
  
<!-- start startartikel der zweiten Unterkategorie -->
  <tr>
    <td width="100%">Unterkategoriename 2 sowie Unterkategori-image 2</td>
  </tr>
  <tr>
    <td width="100%">beschreibung [x]</td>
  </tr>
  <tr>
    <td width="100%"><a href="link">weiter</a></td>
  </tr>
<!-- ende startartikel der zweiten Unterkategorie -->

  <tr>
    <td width="100%"></td>
  </tr>
  
<!-- start startartikel der dritten Unterkategorie -->
  <tr>
    <td width="100%">Unterkategoriename 3 sowie Unterkategori-image 3</td>
  </tr>
  <tr>
    <td width="100%">beschreibung [x]</td>
  </tr>
  <tr>
    <td width="100%"><a href="link">weiter</a></td>
  </tr>
<!-- ende startartikel der dritten Unterkategorie -->

</table>

Tom Quenten
Beiträge: 125
Registriert: Do 10. Jun 2004, 13:55
Wohnort: Gallinchen
Kontaktdaten:

Beitrag von Tom Quenten » Fr 25. Jun 2004, 18:33

Übrigens, diesen Artikel fand ich hier ganz interessant zu der Variablengeschichte. So wie ich hier im Forum rumgestöbert habe, wird oft gefragt wo man denn anfangen kann Module selber zu erstellen. Ich denke das ist hier ein sehr guter Anfang.

http://www.thilo-sommer.de/PHPMyFAQ/ind ... 70&lang=de

----------------------------
Alles wird gut
:D

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Mo 28. Jun 2004, 11:04

ich hoffe, das ist so etwa in deinem sinn:

Code: Alles auswählen

/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname   :	    w3concepts.alist.mod5.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     06-28-2004
* Modified    :     06-28-2004
************************************************/


$selected = "CMS_VALUE[0]";

echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\"><tr valign=\"top\"><td>Kategorie wählen:</td><td><select name=\"CMS_VAR[0]\">";

if($selected!="0" && $selected!=""){
    echo"<option value=\"0\">--- kein ---</option>";
} else {
    echo"<option selected=\"selected\" value=\"0\">--- kein ---</option>";
}

$sql = "
    SELECT a.idcat, a.level, c.name
    FROM {$cfg['tab']['cat_tree']} AS a,
         {$cfg['tab']['cat']} AS b,
         {$cfg['tab']['cat_lang']} AS c
    WHERE
        a.idcat = b.idcat
        AND b.idcat = c.idcat
        AND c.idlang='$lang'
        AND b.idclient='$client'
        AND c.visible = 1
    ORDER BY a.idtree
    ";

$db->query($sql);

while ($db->next_record()) {
    $spaces = "|";
    $levels = $db->f("level");
    for ($i = 0; $i < $levels; $i ++) {
        $spaces = $spaces . "--";
    }
    $spaces .= ">";

    if ($selected == $db->f("idcat")) {
        echo "<option selected=\"selected\" value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>";
    } else {
        echo "<option value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>";
    }
}

echo "</select></td></tr>";

echo "<tr><td>Anzahl Artikel je Seite:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[1]\" value=\"CMS_VALUE[1]\" size=\"3\" /></td>";

echo "<tr><td>Anzahl angezeigte Zeichen der Subheadline:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[3]\" value=\"CMS_VALUE[3]\" size=\"5\" /></td>";

echo "<tr><td>Text für Previous-Link:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[4]\" value=\"CMS_VALUE[4]\" size=\"15\" /></td>";

echo "<tr><td>Text für Next-Link:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[5]\" value=\"CMS_VALUE[5]\" size=\"15\" /></td>";

echo "<tr><td>Thumbnail-Breite:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[7]\" value=\"CMS_VALUE[7]\" size=\"5\" /></td>";

echo "</table>";

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     w3concepts.alist.mod5.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     06-28-2004
* Modified    :     06-28-2004
************************************************/

    // manuelle konfiguration des moduls
    $uploadpfad = "/cms/upload/"; // relativ zum root-verzeichnis (mit slash am anfang und am ende)
    $thumbnailpfad = "/cms/upload/bilder/auto_thumbnails/"; //relativ zum root-verzeichnis (mit slash am anfang und am ende)

    // konfiguration

    $categorie = "CMS_VALUE[0]";

    $angezeigte_anzahl = "CMS_VALUE[1]";
    if ($angezeigte_anzahl == '') $angezeigte_anzahl = 10;

    $subheadline = "CMS_VALUE[3]";
    if ($subheadline == '') $subheadline = 200;

    $navigationslink['previous'] = "CMS_VALUE[4]";
    if ($navigationslink['previous'] == '') $navigationslink['previous'] = '[:: rückwärts ]';

    $navigationslink['next'] = "CMS_VALUE[5]";
    if ($navigationslink['next'] == '') $navigationslink['next'] = '[ vorwärts ::]';

    $bildbreite = "CMS_VALUE[7]";

    $limit = (isset($_GET['displaylimit']) && $_GET['displaylimit'] > 0)?($_GET['displaylimit']):(0);

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

    // liest die anzahl betroffener artikel aus der datenbank
    $sql_1 = "
	SELECT count(*) AS anzahl
        FROM {$cfg['tab']['cat']} AS a,
             {$cfg['tab']['cat']} AS b,
             {$cfg['tab']['cat']} AS c
        LEFT JOIN {$cfg['tab']['cat_art']} AS d ON b.idcat = d.idcat
        LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
        WHERE
              (
                  (
                      c.idcat = b.idcat
                      AND b.parentid = a.idcat
                   )
                   OR
                   (
                      c.idcat = b.idcat
                      AND b.idcat = a.idcat
                   )
               )
               AND a.idcat = $categorie
               AND d.idcat != $categorie
               AND e.online = 1
               AND e.redirect = 0
               AND e.external_redirect = 0
               AND e.idlang = $lang
	       AND d.is_start = 1
                ";
    $sql_2 = "
        SELECT f.name, e.pagetitle, c.idcat, d.idart, e.idartlang, e.created, DATE_FORMAT(e.created,'%d.%m.%y') AS erstellungsdatum
        FROM {$cfg['tab']['cat']} AS a,
             {$cfg['tab']['cat']} AS b,
             {$cfg['tab']['cat']} AS c
        LEFT JOIN {$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
        LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
	LEFT JOIN {$cfg['tab']['cat_lang']} AS f ON f.idcat = d.idcat
        WHERE
              (
                  (
                       c.idcat = b.idcat
                       AND b.parentid = a.idcat
                  )
                  OR
                  (
                       c.idcat = b.idcat
                       AND b.idcat = a.idcat
                  )
              )
              AND a.idcat = $categorie
              AND d.idcat != $categorie
              AND e.online = 1
              AND e.redirect = 0
              AND e.external_redirect = 0
              AND e.idlang = $lang
              AND d.is_start = 1
         ORDER BY f.name ASC
         LIMIT $limit, $angezeigte_anzahl
                    ";

    $db->query($sql_1);
    $db->next_record();
    $anzahl_artikel = $db->f("anzahl");

    $db->query($sql_2);

    echo '<p><table cellpadding="0" cellspacing="0" style="width:100%"><tr style="height:1px;"><td></td><td style="width:200px;"></td><td style="width:50px;"></td></tr>';

    while ($db->next_record()) {
        
        $sql = "
            SELECT a.value, a.typeid, b.type, c.filename, c.dirname FROM {$cfg['tab']['content']} AS a
            LEFT JOIN {$cfg['tab']['type']} AS b ON a.idtype = b.idtype
            LEFT JOIN {$cfg['tab']['upl']} AS c ON a.value = c.idupl
            WHERE
            a.idartlang = ".$db->f("idartlang")."
            AND (
                b.type = 'CMS_HTMLHEAD'
                OR b.type = 'CMS_IMG'
            )
            ORDER BY b.type, a.typeid ASC
            ";

        $db2->query($sql);
        $db2->next_record();

        $link = $sess->url("front_content.php?client=$client&lang=$lang&idcat=".$db->f("idcat")."&idart=".$db->f("idart"));

        echo "<tr><td colspan=\"2\" class=\"artlist_headline\"><a href=\"$link\" class=\"artlist_headlinelink\">".urldecode($db->f("name"))."</a></td>";
        echo "<td class=\"artlist_date\">&nbsp;</td></tr>";

        $db2->next_record();

        // die subheadline auf die gewünschte länge reduzieren (trennung nur
        // nach bzw. vor einem ganzen wort
        if (strlen($db2->f("value")) > $subheadline) {
            $newsubheadline = '';
            $worte = explode (" ",strip_tags(urldecode($db2->f("value"))));
            $zulang = false;
            foreach ($worte as $wort) {
                if (strlen($newsubheadline." ".$wort) >= $subheadline) $zulang = true;
                $newsubheadline = (!$zulang)?($newsubheadline." ".$wort):($newsubheadline);
            }
            $newsubheadline .= "...";
        } else {
            $newsubheadline = strip_tags(urldecode($db2->f("value")));
        }

        $bild_vorhanden = false;
        while ($db2->next_record()) {
            if ($db2->f("type") == 'CMS_IMG' && $db2->f("typeid") == 1) {
                $bilddateiname = "{$thumbnailpfad}{$bildbreite}_".$db2->f("value").".jpg";
                if (!file_exists($cfg['path']['frontend'].$bilddateiname)) {

                    $src_image_size = getimagesize($cfg['path']['frontend'].$uploadpfad.$db2->f("dirname").$db2->f("filename"));

                    $bildhoehe = round($src_image_size[1] * $bildbreite / $src_image_size[0]);
                    if ($bildhoehe > $bildbreite) {
                        $bildhoehe = $bildbreite;
                        $bildbreite = round($src_image_size[0] * $bildhoehe / $src_image_size[1]);
                    }

                    $dst_im = imagecreatetruecolor($bildbreite,$bildhoehe);

                    if ($src_image_size[2] == 1) {
                        $src_im = imagecreatefromGIF($cfg['path']['frontend'].$uploadpfad.$db2->f("dirname").$db2->f("filename"));
                    } elseif ($src_image_size[2] == 2) {
                        $src_im = @ImageCreateFromJPEG($cfg['path']['frontend'].$uploadpfad.$db2->f("dirname").$db2->f("filename"));
                    } else {
                        $src_im = imagecreatefromgd($cfg['path']['frontend'].$uploadpfad.$db2->f("dirname").$db2->f("filename"));
                    }
                    
                    imagecopyresampled ($dst_im,$src_im,0,0,0,0,$bildbreite,$bildhoehe,$src_image_size[0],$src_image_size[1]);
                    imagejpeg ($dst_im,$cfg['path']['frontend'].$bilddateiname,100);
                }
                $bild_vorhanden = true;
            }
        }

        if ($bild_vorhanden) {
            $width = "CMS_VALUE[7]";
            $width += 5;
            $src_image_size = getimagesize($cfg['path']['frontend'].$bilddateiname);
            echo "<tr><td class=\"artlist_subheadline\" style=\"width:{$width}px;\"><a href=\"$link\"><img src=\"$bilddateiname\" {$src_image_size[3]}/></a></td><td class=\"artlist_subheadline\" colspan=\"2\">$newsubheadline</td></tr>";
        } else {
            echo "<tr><td class=\"artlist_subheadline\" colspan=\"3\">$newsubheadline</td></tr>";
        }

    }

    echo '</table>';

    if ($limit > 0 || $anzahl_artikel > $limit + $angezeigte_anzahl) {
        echo '<table cellpadding="0" cellspacing="0" style="width:100%"><tr>';
        if ($limit > 0) {
            $displaylimit = ($limit - $angezeigte_anzahl >= 0)?($limit - $angezeigte_anzahl):(0);
            echo "<td style=\"text-align:left\"><a href=\"".$sess->url("front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit")."\">{$navigationslink['previous']}</a></td>";
        } else {
            echo '<td>&nbsp;</td>';
        }
        if ($anzahl_artikel > $limit + $angezeigte_anzahl) {
            $displaylimit = $limit + $angezeigte_anzahl;
            echo "<td style=\"text-align:right\"><a href=\"".$sess->url("front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit")."\">{$navigationslink['next']}</a></td>";
        } else {
            echo '<td>&nbsp;</td>';
        }
        echo '</tr></table></p>';
    }
?>
gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

Tom Quenten
Beiträge: 125
Registriert: Do 10. Jun 2004, 13:55
Wohnort: Gallinchen
Kontaktdaten:

Beitrag von Tom Quenten » Mo 28. Jun 2004, 11:31

Danke Andreas, ich werde das mal jetzt ausprobieren. Bin gespannt wie ein Flitzebogen ...

Gesperrt