Artikelanzahl ermitteln und ausgeben

Fragen zur Implementierung und/oder Anpassung von ConPresso 4 werden in diesem Forum diskutiert.
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Artikelanzahl ermitteln und ausgeben

Beitrag von Mr. Magpie »

Das Thema wurde hier im Zus.hang mit mod_pages schon einmal behandelt.
Aber die Ermittlung der Artikelanzahl kann ja auch ohne mod_pages interessant sein.

Mithilfe von

Code: Alles auswählen

<?php
// Artikelanzahlen für alle Rubrik-IDs bestimmen
$query = "SELECT rubric_id, count(rubric_id) AS artikelanzahl FROM "
            . CPO_NEWS . " WHERE " 
            . ( $cpoSystem['release'] 
            ? "artikel_archiv<2 AND freigabe=" . STATE_RELEASED 
            : "artikel_archiv<1 AND freigabe!=" . STATE_BLOCKED ) 
            . " AND pub_datum<='" . date('Y-m-d H:i:s', time()) 
            . "' AND verfallsdatum>='" . date('Y-m-d H:i:s', time()) 
            . "' GROUP BY rubric_id "; 
$db = new DB; 
$db->query($query); 
while ($db->next_record()) {
    $artikelanzahl[$db->v('rubric_id')] = $db->v('artikelanzahl');
}

// Zuordnung Rubrikname - Rubrik-ID
$db->query('SELECT id, name FROM '.CPO_RUBRIC);
while ($db->next_record()) {
    $RubricID[$db->v('name')] = $db->v('id');
}
?>
kann man die Anzahl der Artikel in den Rubriken ermitteln - diesen Code bspw. in den lokalen oder globalen Header einfügen.

Das Ergebnis lässt sich an der gewünschten Stelle - PHP-Code muss dort erlaubt sein - ausgeben:

a) Über die Rubrik-IDs, hier '60' bzw. '37':

Code: Alles auswählen

Rubrik "Über uns": <?php echo (int) $artikelanzahl[60]; ?><br />
Rubrik "Startseite": <?php echo (int) $artikelanzahl[37]; ?><br />
b) Über die Rubriknamen:

Code: Alles auswählen

Rubrik "Über uns": <?php echo (int) $artikelanzahl[$RubricID['Über uns']]; ?><br />
Rubrik "Startseite": <?php echo (int) $artikelanzahl[$RubricID['Startseite']]; ?>
Günther Ludwig
Heike-Marie
ConPresso-Newbie
Beiträge: 23
Registriert: 05.08.2008 04:20
Wohnort: Vogelsberg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Beitrag von Heike-Marie »

Sowas ähnliches habe ich auch gemacht (vermutlich hier irgendwo mal einen Tip gelesen):

in die i_index.php (und i_archive.php) unterhalb von

Code: Alles auswählen

$db->query($query);
$anzahl = $db->num_rows();
in der Art ergänzen:

Code: Alles auswählen

if ($anzahl > 1) {
echo ('<p>"'.$cpoRubricSettings['title'].'" enthält '.$anzahl.' Artikel</p>')."\n"; 
}
Das erscheint dann als erste Zeile im Content-Bereich und kann mittels CSS an die gewünschte Stelle verschoben werden.
Zum Beispiel so unters Banner:
Dateianhänge
Beispiel.jpg
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

Auch nicht schlecht!

Wobei ich in meinem Fall aber eine Lösung brauchte, bei der der Kunde (ohne HTML-/PHP-Kenntnisse) selbst eine Liste von Rubriknamen und den zugehörigen Artikelanzahlen am Anfang der Rubrikseite einfügen konnte.
Auf i_index.php/i_archive.php hätte ich ihn nur äußerst ungern losgelassen, wobei er dann auch wieder ein FTP-Programm hätte benutzen müssen, ...
Günther Ludwig
Heike-Marie
ConPresso-Newbie
Beiträge: 23
Registriert: 05.08.2008 04:20
Wohnort: Vogelsberg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Beitrag von Heike-Marie »

Ich hab's inzwischen in den Local_footer verschoben, ich bastel gern.
Da kann man aber nicht $anzahl nehmen, sonst wird das Archiv mit dazugezählt. Also noch einen anderen Namen geben $zzahl = $anzahl; so etwa. Und den $zzahl dann benutzen und $anzahl im Archiv, dann zählt es richtig.

A propos FTP-Programm: PS-Pad Editor ist da sehr geeignet. Ein Editor mit Dateiexplorer und Syntaxhervorhebung. Man braucht kein extra FTP-Programm, sondern kann direkt "online" arbeiten. Und für lau.
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

sFTP müsste es schon mindestens unterstützen. Mein Lieblings-Editor (WeBuilder) kann das.

Aber darum geht es gar nicht. Es geht um den häufigsten Fehler in der IT und der sitzt zwischen den Ohren des Anwenders. Als verantwortungsvoller Admin lasse ich daher niemanden mit Editor/FTP in den CPO-Dateien wurschteln.
Günther Ludwig
Benutzeravatar
baluo
ConPresso-Experte
Beiträge: 607
Registriert: 14.11.2005 12:17
Hat sich bedankt: 216 Mal
Danksagung erhalten: 11 Mal

Beitrag von baluo »

Hallo Heike & Guenther,

koennte ihr mal jeweils eine Beispiel-URL angeben?

Danke fuer die beiden Tips!
Gerhard
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

Hallo Gerhard,

ich selbst habe bisher nur eine Testseite out in the Wildlife: http://www.flimmpo.de/verkauf/index.php?rubric=84

Die Artikelanzahlen aller anderen Verkaufs- und Vermietungsrubriken werden dort bisher manuell eingefügt, was natürlich nicht effizient ist.

Heikes Tierschutzverein findest du hier: http://www.tierheim-lauterbach.de/
Günther Ludwig
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 714
Registriert: 22.02.2006 22:00
Wohnort: Berlin
Hat sich bedankt: 216 Mal
Danksagung erhalten: 26 Mal
Kontaktdaten:

Beitrag von hscha »

Hallo und frohe Weihnachten alle zusammen!!!

Ich suche eine Möglichkeit, innerhalb der _cfg/global_header.php die Anzahl der freigegebenen Artikel der aktuellen Rubrik zu ermitteln. In CPO 4.0.7 ging das irgendwie über $max_anzahl. In den neueren Versionen scheint das aber nicht mehr zu funktionieren.

Vielen Dank im Voraus und einen guten Rutsch ins
Neue Jahr wünscht
Horst aus Berlin
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Wärest Du ausführlicher müsste ich jetzt nicht fragen...
irgendwie über $max_anzahl
gab es auh in den alten Versionen nicht, es sei denn, man ermittelt $max_anzahl über einen PHP-Code, den Du aber verschweigst und somit nicht die Möglichkeit eröffnest Deinen Fehler zu erkennen.

Die neue Version unterscheidet sich ja speziell durch die Nutzung von Seitentemplates (in denen PHP-Codes nicht funktionieren).
Aber wenn Du Seitentemplates nutzen würdest, dann hättest Du das sicher geschrieben, da Du schon ein halbes Dutzend mal erkennen musstest, daß genau dies Dein Problem ist und man durch Nutzung von Header- und Footer-Dateien eben weiterhin so arbeiten kann, wie in den alten Versionen.

Und nun die Fragen:
Woran erkennst Du daß es nicht mehr funktioniert?
Was hast Du versucht, um es zum Funktionieren zu bringen?
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 714
Registriert: 22.02.2006 22:00
Wohnort: Berlin
Hat sich bedankt: 216 Mal
Danksagung erhalten: 26 Mal
Kontaktdaten:

Beitrag von hscha »

Hallo Markus,
$max_anzahl...
gab es auch in den alten Versionen nicht, es sei denn, man ermittelt $max_anzahl über einen PHP-Code, den Du aber verschweigst und somit nicht die Möglichkeit eröffnest Deinen Fehler zu erkennen.
Ich hatte $max_anzahl in der global_header.php globalisiert und den Wert einer anderen Variable zugewiesen:

Code: Alles auswählen

global $max_anzahl;
	$maxpic = $max_anzahl;
Und nun die Fragen:
Woran erkennst Du daß es nicht mehr funktioniert?
Daran, dass $max_anzahl leer ist, wenn ich es in CPO 4.2 genauso mache
Was hast Du versucht, um es zum Funktionieren zu bringen?
Ich hatte zunächst ein Problem, mich an eine Site zu erinnern, in der ich diesen Mechanismus zum Generieren von Navigationslinks genutzt hatte (das war 2007). Deshalb habe ich mich oben so ungenau ausgedrückt.
Nun habe ich das System auf CPO 4.2 gebracht und verstehe nicht ganz, warum es nicht läuft...
Die Variable wird in _includesite/i_index.php "gefüllt":

Code: Alles auswählen

$max_anzahl = $db->v('COUNT(*)')
Ich hoffe, ich habe jetzt genug beschrieben, damit du was damit anfangen kannst.

Grüße von Horst
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Und genau da haben wir Dein Problem:

in _rubric/index.php steht folgendes

Code: Alles auswählen

    include(CPO_BASEDIR.$directory.'/loadheaders.php');
    require(CPO_BASEDIR.'_includesite/i_index.php');
    include(CPO_BASEDIR.$directory.'/loadfooters.php');
und somit ist der Header schon auf dem Bildschirm, bevor in i_index.php die Variable gefüllt wird.

Das ist aber schon immer so... also mußt Du früher auch was anders gemacht haben.

Das ist ja schon immer eine ConPresso-Krankheit, daß Inhalte immer gleich ausgegeben werden statt sie zu sammeln und dann erst in einem zweiten Schritt auszugeben.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 714
Registriert: 22.02.2006 22:00
Wohnort: Berlin
Hat sich bedankt: 216 Mal
Danksagung erhalten: 26 Mal
Kontaktdaten:

Beitrag von hscha »

Hallo Markus,

jetzt habe ich genau die Stelle wiedergefunden, an der wir damals was geändert haben (war auch ein Tipp vom ConPresso-Team, habe ich aber im Forum nicht wiedergefunden):

in der geänderten index.php steht:

Code: Alles auswählen

ob_start(); 
require(CPO_BASEDIR.'_includesite/i_index.php'); 
$articles = ob_get_contents(); 
ob_end_clean();            

include(CPO_BASEDIR.$directory.'/loadheaders.php');
// require(CPO_BASEDIR.'_includesite/i_index.php');
echo $articles;
include(CPO_BASEDIR.$directory.'/loadfooters.php');
Ich ändere das mal in meiner CPO 4.2-Installation. Mal sehen, was dann passiert...

Gibt es ansonsten eine Datenbank-Abfrage, mit der ich das einfach realisieren kann?

Danke und Grüße von
Horst
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Na, also, damit geht es doch.

Du könntest die Abfrage aus i_index.php benutzen.
Damit verlangsamst Du aber nur die Seite und erreichst auch nichts anderes.

Um solchen Änderungen auf die Spur zu kommen, habe ich ja in mod_track die Prüfung auf geänderte Original-Dateien eingebaut.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Der Beitrag ist zwar schon alt, allerdings bräuchte ich genau sowas, was Heike-Marie hier weiter oben beschreibt:
in die i_index.php (und i_archive.php) unterhalb von

Code: Alles auswählen

$db->query($query);
$anzahl = $db->num_rows();
in der Art ergänzen:

Code: Alles auswählen

if ($anzahl > 1) {
echo ('<p>"'.$cpoRubricSettings['title'].'" enthält '.$anzahl.' Artikel</p>')."\n"; 
}
Das erscheint dann als erste Zeile im Content-Bereich und kann mittels CSS an die gewünschte Stelle verschoben werden.
Zum Beispiel so unters Banner:
Nur leider wird bei mir nichts ausgegeben, darum vermute ich mal, dass dies nicht so 1:1 für eine 4.1.6 übernommen werden kann? :roll:

Gruß,
dutch
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Es spricht nichts dagegen dass es funktioniert, aber Du kannst sicher beschreiben wie Du Dein System konfiguriert hast,
also ob Du z.B. Seitentemplates statt php-Dateien benutzt.
Und was genau Du jetzt geändert hast (Dateien zippen und beilegen).

Was passiert wenn Du

Code: Alles auswählen

echo "Test";
in die if-Abfrage schreibst?

Wichtig:
<?
ist auf neueren Systemen sowieso nicht möglich sondern muss
<?php
lauten.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Antworten