Anzeige neuer Artikel in einer Rubriken-Übersicht

Fragen und Diskussionen zu laufenden ConPresso 4.x Projekten werden in diesem Forum diskutiert.
Antworten
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 715
Registriert: 22.02.2006 22:00
Wohnort: Berlin
Hat sich bedankt: 217 Mal
Danksagung erhalten: 26 Mal
Kontaktdaten:

Anzeige neuer Artikel in einer Rubriken-Übersicht

Beitrag von hscha »

Liebe ConPresso-Gemeinde,

ich knobele an einer Lösung für folgendes Problem:
Auf einer Schulwebseite werden grafische Links zu verschiedenen Klassen-Rubriken angezeigt. Jeder Link repräsentiert also eine eigene Klassen-Rubrik, z.B. "7a" usw.

Ich möchte nun durch ein Script (z.B. über mod_inline) erreichen, dass für Klassenrubriken, die neue Artikel enthalten (z.B. nicht älter als 3 Tage), ein alternativer grafischer Link z.B. mit einer "neu"-Ecke angezeigt wird. Das Script müsste also
1) in der Rubrik den neuesten Artikel finden
2) über $db_pub_datum dessen Publikationsdatum auslesen, dieses
3) mit dem aktuellen Datum vergleichen sowie die Differenz in Tagen berechnen.
4) Im letzten Schritt dann die Grafikausgabe generieren.
Die Schritte 3 und 4 sind für mich kein Problem. Ich brauche einen Tipp, wie ich die Schritte 1 und 2 vollziehen kann.
Hat jemand einen Tipp für mich?

Adventliche Grüße aus Berlin von
Horst
Dateianhänge
hinter jeder Grafik steckt ein Link zu einer Klassen-Rubrik
hinter jeder Grafik steckt ein Link zu einer Klassen-Rubrik
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 715
Registriert: 22.02.2006 22:00
Wohnort: Berlin
Hat sich bedankt: 217 Mal
Danksagung erhalten: 26 Mal
Kontaktdaten:

Beitrag von hscha »

Hier noch eine Ergänzung: Mit der Abfrage

Code: Alles auswählen

SELECT rubric_id, commentary, verfallsdatum, templates_id, nr, idx, email, autor, pub_datum, titel, initial, freigabe, changer FROM cpo__news WHERE artikel_archiv<1 AND freigabe!=2 AND pub_datum<='2011-12-10 20:41:05' AND verfallsdatum>='2011-12-10 20:41:05' AND rubric_id IN ( 23 ) ORDER BY pub_datum DESC LIMIT 0,1 
erhalte ich trotz der Einschränkung auf die Rubrik 23 immer den neuesten Artikel aus dem ganzen freigegebenen Artikelbestand. Ich möchte jedoch nur den neuesten Artikel aus der Rubrik 23 abfragen. Wie muss ich die Abfrage ändern. Gibt es dazu einen Tipp? :roll:

Noch ein Gruß von
Horst
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 »

hscha hat geschrieben:Hier noch eine Ergänzung: Mit der Abfrage

Code: Alles auswählen

SELECT rubric_id, commentary, verfallsdatum, templates_id, nr, idx, email, autor, pub_datum, titel, initial, freigabe, changer FROM cpo__news WHERE artikel_archiv<1 AND freigabe!=2 AND pub_datum<='2011-12-10 20:41:05' AND verfallsdatum>='2011-12-10 20:41:05' AND rubric_id IN ( 23 ) ORDER BY pub_datum DESC LIMIT 0,1 
erhalte ich trotz der Einschränkung auf die Rubrik 23 immer den neuesten Artikel aus dem ganzen freigegebenen Artikelbestand. Ich möchte jedoch nur den neuesten Artikel aus der Rubrik 23 abfragen. Wie muss ich die Abfrage ändern. Gibt es dazu einen Tipp? :roll:

Noch ein Gruß von
Horst
Also eigentlich sollte der Code so aussehen:

Code: Alles auswählen

<?php  

// Die Parameter 
$rubrikid = 23; // der ID der Rubrik 
$artikelanzahl = 1; // maximale Anzahl der auszugebenden Artikel 
$sortierung = 'pub_datum desc'; // Art der Artikelsortierung 


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

$query = "SELECT rubric_id, commentary, verfallsdatum, templates_id, nr, idx, email, autor, pub_datum, titel, initial, freigabe, changer 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."' ORDER BY ".$sortierung." LIMIT 0," . $artikelanzahl . " "; 
$db = new DB; 
$db->query($query); 

// hier dann der Code zur Ausgabe via select_template

?>
wobei es egal ist ob rubric_id=23 oder rubric_id IN (23) benutzt wird, auf jeden Fall sollten keine Artikel aus anderen Rubriken angezeigt werden.
Bist Du denn sicher, daß tatsächlich andere Rubriken ausgelesen werden?
Wo testet Du die Abfrage? Diekt in der Datenbank via PHPmyAdmin oder direkt im ConPresso-Code?
Bei mod_inline immer dran denken, daß es mit Funktionen arbeitet, die jegliche außerhalb definierte Variable ignorieren, solange man diese nicht globalisiert.
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
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Ich möchte nun durch ein Script (z.B. über mod_inline) erreichen, dass für Klassenrubriken, die neue Artikel enthalten (z.B. nicht älter als 3 Tage), ein alternativer grafischer Link z.B. mit einer "neu"-Ecke angezeigt wird. Das Script müsste also
1) in der Rubrik den neuesten Artikel finden
2) über $db_pub_datum dessen Publikationsdatum auslesen, dieses
3) mit dem aktuellen Datum vergleichen sowie die Differenz in Tagen berechnen.
4) Im letzten Schritt dann die Grafikausgabe generieren.
Wäre es nicht einfacher das in dieser Form zu machen:
1.) Alle Rubriken (aus der Menge der Klassenrubriken) finden, bei denen es einen Artikel mit Publikationsdatum neuer als 3 Tage gibt
2.) für die Klassen, deren Rubrik_ID in der Menge der Treffer vorkommt eine andere Grafik zu benutzen, die z.B. ein Präfix wie "neu" hat

Also im Grunde Punkt 1 bis 3 gleich in der Abfrage erledigen...?
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: 715
Registriert: 22.02.2006 22:00
Wohnort: Berlin
Hat sich bedankt: 217 Mal
Danksagung erhalten: 26 Mal
Kontaktdaten:

Beitrag von hscha »

Hallo Markus,

du schreibst:
Wäre es nicht einfacher das in dieser Form zu machen:
1.) Alle Rubriken (aus der Menge der Klassenrubriken) finden, bei denen es einen Artikel mit Publikationsdatum neuer als 3 Tage gibt
2.) für die Klassen, deren Rubrik_ID in der Menge der Treffer vorkommt eine andere Grafik zu benutzen, die z.B. ein Päfix wie "neu" hat

Also im Grunde Punkt 1 bis 3 gleich in der Abfrage erledigen...?
Ja, das wäre noch besser. Ich habe das Ganze in einer Funktion untergebracht und nicht das $inline-Array ausgelesen. Darin liegt wahrscheinlich der Fehler.

Aus deinem Vorschlag ergeben sich zwei Fragen für mich:
- Wie formuliert man die Abfrage, wenn man vom Publikationsdatum drei Tage abzieht?
- Wie checke ich das Ergebnis der Abfrage?
Die Klassenrubriken sind z.B. 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30.

Vielen Dank für deine sonntäglichen Ratschläge!
Grüße von
Horst
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 »

Ich hätte mir das etwa so vorgestellt:

Code: Alles auswählen

<?php  

$grafik = array();
$id = '';

// Die Parameter 
$rubrikids = '20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30'; // die IDs der Rubriken 
$NeuheitInTagen = 3;

// Klassengrafiken
// $grafik[RUBRIC_ID] = 'KLASSENNAME.jpg';
$grafik[20] = '7a.jpg';
$grafik[21] = '7b.jpg';
$grafik[22] = '7c.jpg';
$grafik[23] = '8a.jpg';
$grafik[24] = '8b.jpg';
$grafik[25] = '8c.jpg';
$grafik[26] = '8d.jpg';
// etc...

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

// Zeitdifferenz
$neuheit = time() - ($NeuheitInTagen * 24 * 60 * 60);

$query = "SELECT rubric_id 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 pub_datum>='" . date('Y-m-d H:i:s', $neuheit) . "' AND verfallsdatum>='".date('Y-m-d H:i:s', time())."' AND rubric_id IN ( ".$rubrikids." ) "; 
$db = new DB; 
$db->query($query); 

while($db->next_record()) { 

	// wenn die Rubrik zu den Rubriken mit Neuheiten gehört und noch kein 'neu' erhalten hat,
	// dann ein 'neu' vor den Grafiknamen hängen
	$id = $db->v('rubric_id');
    if (array_key_exists($id, $grafik) && substr($grafik[$id],0,3)!='neu')  $grafik[$id] = 'neu'.$grafik[$id];

} 

// nun ist das Array mit den Klassengrafiken an den gewünschten Stellen durch ein 'neu' ergänzt

?> 
- Wie checke ich das Ergebnis der Abfrage?
Die Frage verstehe ich nicht? Du schaust es Dir an, oder?
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: 715
Registriert: 22.02.2006 22:00
Wohnort: Berlin
Hat sich bedankt: 217 Mal
Danksagung erhalten: 26 Mal
Kontaktdaten:

Beitrag von hscha »

Cool! Ich werde es so probieren und das Ergebnis hier posten.
Vielen Dank, Markus!
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 715
Registriert: 22.02.2006 22:00
Wohnort: Berlin
Hat sich bedankt: 217 Mal
Danksagung erhalten: 26 Mal
Kontaktdaten:

Beitrag von hscha »

Hallo Markus,
ja, so geht's! Zu besichtigen ist das hier: http://www.reformschule-charlottenburg. ... ic=klassen.

Super! Vielen Dank und Grüße von
Horst
Antworten