mod_pages - Artikelanzahl auslesen

Diskussion zu nicht so umfangreichen Modulen und Start-Up für neue Module. Ansonsten bitte die speziellen Kategorien benutzen!
Antworten
SebastianG
ConPresso-User
Beiträge: 72
Registriert: 04.04.2009 20:01
Hat sich bedankt: 29 Mal
Danksagung erhalten: 3 Mal

mod_pages - Artikelanzahl auslesen

Beitrag von SebastianG »

Hallo,

ich habe für eine Kiga-Site CPO4 mit Hilfe dieses Forums zum laufen und anpassen gebracht und möchte nun noch "feintunen":

Im title-tag möchte ich entweder den Rubrik-Titel ausgeben (sofern die Rubrik mehr als einen Artikel hat) oder den Artikel-Titel ausgeben (sofern die Rubrik nur 1 Artikel aufweist).

Ohne eine solche Abfrage, werden alle Artikel-Titel hintereinander ausgegeben (getrennt von dem &#149-Punkt) - und das möchte ich nicht.

Ich stelle es mir als einfachstes vor, dazu die Anzahl der Artikel per count des $titel_string auszuzählen und dann eine entsprechende Abfrage einzubauen.

Wobei es jetzt hakt, ist das vermeintlich einfache auszählen per count.

Code: Alles auswählen

$artikel_anzahl;
$artikel_anzahl = count ($titel_string);

// testausgabe:
echo $artikel_anzahl;

// wenn mehrere Artikel in Rubrik, dann Rubriktitel:
if ($artikel_anzahl != 1)
 echo htmlspecialchars($cpoRubricSettings['title']);

// wenn nur 1 Artikel in Rubrik, also bei "Angebot":
elseif ($artikel_anzahl == 1)
 if ($titel_string)
  echo $titel_string; 

Mit diesem Code erscheint überall die 1 zuerst, gefolgt von den Artikel-Titel - getrennt durch den Bullet-Punkt.
(Die Testausgabe, wo bisher die 1 immer erscheint, habe ich jetzt vorerst wieder auskommentiert).

Wer hat einen hilfreichen Tip/Wink für mich?

Vielen Dank + Gruß
Sebastian
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Wer hat einen hilfreichen Tip/Wink für mich?
Als Tip nenne ich mal mod_pages/mod_header.php

da findet sich der Code zur Erzeugung, der sich natürlich nach Wunsch anpassen lässt.

Code: Alles auswählen

	if ( $activeModules['Pages']['meta-tags'] == 'yes')  {
		// creating meta-tags
		if (!isset($pos) || $pos<0) $pos = 0;
		$now = time();
		$query = (!isset($_REQUEST['nr'])) ? "SELECT keywords, commentary, titel, autor FROM ".CPO_NEWS." WHERE artikel_archiv<2 AND freigabe=".STATE_RELEASED." AND pub_datum<='".date('Y-m-d H:i:s', $now)."' AND verfallsdatum>='".date('Y-m-d H:i:s', $now)."' AND rubric_id='".addslashes($cpoRubric['id'])."' ORDER BY ".$cpoRubricSettings['sorting']." LIMIT ".$pos.",".$cpoRubricSettings['noOfArticles'] : "SELECT keywords, commentary, titel, autor FROM ".CPO_NEWS." WHERE nr='".$_REQUEST['nr']."'" ;
		DEBUG(1, $query, __FILE__, __LINE__);
		$db = new DB;
		$db->query($query);

		while($db->next_record()):
			if ($db->v('autor') != '')		$authors[$db->v('autor')]	= 1;
			if ($db->v('keywords') != '')	$keywords_string	= $keywords_string .	", " . $db->v('keywords');
			if ($db->v('commentary') != '') $commentary_string	= $commentary_string .	". " . $db->v('commentary');
			if ($db->v('titel') != '')		$titel_string	= $titel_string .	" &#149; " . $db->v('titel');
		endwhile;
		if (is_array($authors))  {
			foreach ($authors as $k=>$v) {
				$authors_string = $authors_string .	", " . $k;
			}
		}
	}
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
SebastianG
ConPresso-User
Beiträge: 72
Registriert: 04.04.2009 20:01
Hat sich bedankt: 29 Mal
Danksagung erhalten: 3 Mal

Beitrag von SebastianG »

Vielen Dank für die ANtwort!

Hmm, die php-Datei hatte ich zuvor gefunden, als ich danach suchte, wo die Bullets herkommen :)

interessant für mich ist wohl die definition aus der while-schleife:

Code: Alles auswählen

if ($db->v('titel') != '')      $titel_string   = $titel_string .   " • " . $db->v('titel');
diese abfrage habe ich verstanden.

jedoch verstehe ich die funktionsweise mit der zuordnung von v generell nicht, wofür v steht usw.
___

dann müsste mein count-anliegen wohl direkt nach endwhile reinkommen - vielleicht so?!

Code: Alles auswählen

endwhile;
$artikel_anzahl = count ($db->v('titel'));
und kann ich den rest dann im header-frontend von mod_pages aufrufen? oder besser auch in die mod_header.php?

Schöne Pfingsten :)
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Kurzer PHP-Kurs in Sachen ConPresso:

Wenn man mittels
$db = new DB;
eine Datenbank-Klasse erstellt hat
und dann eine Abfrage wie
$db->query($query);
ausführt, dann kann man in einer Schleife
while($db->next_record()):
die Werte der Datenbankspalten mittels
$db->v('Feldname');
erhalten.
Interessiert man sich nur für die Anzahl, dann reicht auch
$db->num_rows()
so daß man mit einer Bedingung in der Form
if ($db->num_rows()>1) {
CODE CODE CODE...
}
ans Ziel kommen sollte ohne selbst nachzählen zu müssen.

Alternativ kann man in der Schleife auch einen Zähler ansteigen lassen
$i++
und diesen dann für die Prüfung benutzen.
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
SebastianG
ConPresso-User
Beiträge: 72
Registriert: 04.04.2009 20:01
Hat sich bedankt: 29 Mal
Danksagung erhalten: 3 Mal

Beitrag von SebastianG »

Hach Klasse - habs dank deinem Exkurs hinbekommen :)

hier die Lösung, (wobei die 1. auskommentierte Zeile noch den Original-Code zur Gegenüberstellung aufweist):

Code: Alles auswählen

// if ($db->v('titel') != '') $titel_string = $titel_string . " • " . $db->v('titel');
	if ($db->v('titel') != '')
		{
			if ($db->num_rows('')>1) { $titel_string = $cpoRubricSettings['title'] . " • ";}
			elseif ($db->num_rows('')==1) { $titel_string = $db->v('titel') . " • ";}
		}
endwhile;

Erlaube mir noch eine Verständnisfrage:
Wozu wird $titel_string erneut aufgeführt? also das unterstrichene?

if ($db->v('titel') != '') $titel_string = $titel_string . " • " . $db->v('titel');

Vielen Dank + schöne Pfingsten!
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Code: Alles auswählen

if ($db->v('titel') != '') $titel_string = $titel_string . " • " . $db->v('titel');
Diese PHP-Zeile liest man so:

Wenn (beim Durchlaufen der Datensätze der Abfrage) der Titel des Artikels nicht leer ist, dann soll folgendes gelten:

$titel_string wird geändert zu $titel_string mit angehängtem Punkt und angehängtem Titel

oder auf deutsch: hänge den Titel an $titel_string


das könnte man auch schreiben als

Code: Alles auswählen

if ($db->v('titel') != '') $titel_string .= " • " . $db->v('titel');
Alternativ könnte man auch ein Array füllen und dieses mittels implode() verbinden lassen.
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
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 »

Diese kleine Diskussion inspirierte mich, folgende Frage zu stellen: Ich möchte einem der Redakteure (er darf auch Rubriken anlegen und in mod_pages arbeiten) einen Code an die Hand geben, um die Anzahl von Artikeln in (bestimmten) Unterrubriken ausgeben zu lassen.
Das Ganze sollte möglichst einfach und für dieses Laien zu benutzen sein.

Und zwar geht es um die "Ortsliste" in folgendem Projekt: http://www.florida-immobilien-portal.de ... etung.html
Günther Ludwig
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Hier gab es ja schon aml einen Code für die Artikel einer bestimmten Rubrik
http://community.conpresso.de/viewtopic ... 2177#22177

Für die reine Anzahl kann das wesentlich verschlankt werden:

Code: Alles auswählen

<?php 

// Die Parameter
$rubrikid = 1; // der ID der Rubrik

// ab hier nix mehr ändern
if (!defined('CPO')) exit;

$query = "SELECT count(nr) 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()) 
			. "' AND rubric_id='".$rubrikid."' ";
$db = new DB;
$db->query($query);
$db->next_record();

$artikelanzahl = $db->v('count(nr)');

?>
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
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 »

Das ist ja schon einmal sehr gut!
Musste nur noch ein

Code: Alles auswählen

echo $artikelanzahl;
dort hinsetzen, wo die Ausgabe der ermittelten Anzahl erfolgen soll.

Verzeih mir bitte die Frage, aber jetzt wäre es noch sehr praktisch, wenn der liebe Redakteur nicht nur eine einzelne Rubrik-ID angeben könnte, sondern eine kleine Liste von Rubrik-IDs. Und wie erreiche ich dann die Ausgabe einer einzelnen Zahl?

p.s.: Ich weiß, ich sollte mir unbedingt einmal die Zeit nehmen, gründlich PHP zu lernen. Aber an der Zeit mangelt's ja gerade :( - einfach zuviele Aufträge :) Würde zwar am Ende sicher auch viel Zeit sparen, da ich nicht immer so dumm fragen müsste, aber da beißt sich die Katze in den Schwanz...
Zuletzt geändert von Mr. Magpie am 01.06.2009 14:07, insgesamt 1-mal geändert.
Günther Ludwig
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Dazu könnte man z.B. die Zeile

Code: Alles auswählen

$rubrikid = 1; // der ID der Rubrik 
ändern in

Code: Alles auswählen

$rubrikids = '1,2,3,4,5,6'; // die IDs der Rubriken durch Komma getrennt in Anführungszeichen 
und würde dann die Zeile

Code: Alles auswählen

. "' AND rubric_id='".$rubrikid."' "; 
ändern in

Code: Alles auswählen

. "' AND rubric_id IN (".$rubrikids.") "; 


theoretisch zumindest...

und dafür sind weniger PHP-Kenntnisse als SQL-Kenntnisse erforderlich :wink:
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
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 »

Okay, und wie gebe ich dann die einzelne Anzahl wieder aus?? :oops:
Günther Ludwig
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Da ich es nun nicht mehr verstehe...

...willst Du eine Liste von Rubriken angeben und statt EINER einzelnen (Gesamt-) Anzahl zu JEDER Rubrik die Zahl der dort enthaltenen Artikel???

Das würde auf SQL-Aggregat-Funktionen hinauslaufen...

Was spricht eigentlich gegen die aktuell verwendete breadcrumb-Navi oder die sitemap von mod_menu mit Ausgabe der Artikelzahl?
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
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 »

MarkusR hat geschrieben:...willst Du eine Liste von Rubriken angeben und statt EINER einzelnen (Gesamt-) Anzahl zu JEDER Rubrik die Zahl der dort enthaltenen Artikel???
Ja, genau!
MarkusR hat geschrieben:Was spricht eigentlich gegen die aktuell verwendete breadcrumb-Navi [...]?
Nichts, wenn ich es damit nur hinkriegen würde... :cry:
Günther Ludwig
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Dann sollte das hier reichen:

Code: Alles auswählen

<?php  

$query = "SELECT rubric_id, count(rubric_id) AS artikelanzahl, artikel_archiv, freigabe, pub_datum, verfallsdatum FROM "  
            . CPO_NEWS . " GROUP BY rubric_id HAVING ( "  
            . ( $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())  
            . "' ) "; 
$db = new DB; 
$db->query($query); 
while ($db->next_record()) $artikelanzahl[$db->v('rubric_id')] = $db->v('artikelanzahl');

?>
und an der gewünschten Stelle kann man einfach

Code: Alles auswählen

<?php echo $artikelanzahl[RUBRIC_ID]; ?>
benutzen wobei RUBRIC_ID die ID der Rubrik ist.
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
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 »

Da kommen bei mir ganz widersinnige Werte heraus!

Den Code habe ich unverändert in den Seitenkopf (mod_pages)/global_header eingefügt.

Im Rubrikkopf/local_header gebe ich die verschiedenen Anzahlen aus:

Rubrik Nr. 02: <?php echo $artikelanzahl[2]; ?><br>
Rubrik Nr. 17: <?php echo $artikelanzahl[17]; ?><br>
Rubrik Nr. 18: <?php echo $artikelanzahl[18]; ?><br>
Rubrik Nr. 32: <?php echo $artikelanzahl[32]; ?><br>
Rubrik Nr. 08: <?php echo $artikelanzahl[8]; ?><br>
Rubrik Nr. 19: <?php echo $artikelanzahl[19]; ?>
Günther Ludwig
Antworten