Rubric-Include per mod_functions

Fragen zur Implementierung und/oder Anpassung von ConPresso 4 werden in diesem Forum diskutiert.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Ich verwende keine Seitentemplates...
Dann benutze in der Funktion eben die offizielle Funktion, die auch vom Page-Parameter benutzt wird:

Code: Alles auswählen

function rubricinclude($rubric_id, $artikelanzahl, $sortierung){
switch ($sortierung){ 
   case 'manual': $sortierung = 'sort_id desc'; break; 
   case 'index aufwärts': $sortierung = 'index asc'; break; 
   case 'index abwärts': $sortierung = 'index desc'; break; 
   default: $sortierung = 'sort_id desc'; 
} 
return getArticles($rubric_id, 'php', 0, array('settings'=>array('noOfArticles'=>$artikelanzahl, 'sorting'=>$sortierung))); 
}
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: 712
Registriert: 22.02.2006 22:00
Wohnort: Berlin
Hat sich bedankt: 216 Mal
Danksagung erhalten: 25 Mal
Kontaktdaten:

Beitrag von hscha »

edit: Mit deinem korrigierten Quellcode geht's!

Kann man auf diese Weise eigentlich die template_id mit übergeben? Das wäre ziemlich wichtig, da die Templates die Ausgabe der Artikel auf bestimmten Klassenseiten regeln.

Noch ein Horstgruß
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Nein.

das fehlt der Conpresso-Funktion sowieso noch. Vermutlich hat Balu dafür, entgegen den vielen Anwendern, bisher noch keine Verwendung gehabt.
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: 712
Registriert: 22.02.2006 22:00
Wohnort: Berlin
Hat sich bedankt: 216 Mal
Danksagung erhalten: 25 Mal
Kontaktdaten:

Beitrag von hscha »

Kann man das als Workarround einbauen?

Sonn-tägliche Grüße von
Horst
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Natürlich kann man das, aber damit greift man in wichtige Conpresso-Dateien ein.

Wenn Du Deiner Funktion noch eine Variable $forcetemplate_id mitgibst, dann kannst Du in _include/select_template.php
nach

Code: Alles auswählen

if ($template=='') {
    $template = $cpoRubricSettings['standard_template'];
}
noch folgendes einfügen

Code: Alles auswählen

if ($forcetemplate_id) {
    $template = $forcetemplate_id ;
}
Außerdem muss in _include/function.php

Code: Alles auswählen

function getArticles($rubricId, $pagetype = 'index', $pos = 0, $cpoRubricOverride = array())
erweitert werden zu

Code: Alles auswählen

function getArticles($rubricId, $pagetype = 'index', $pos = 0, $cpoRubricOverride = array(), $forcetemplate_id = 0)
Nicht getestet!

Mich persönlich würde ja mal interessieren, wie komplex Dein forciertes Template ist, daß man dafür die ganze ressourcenfressende Conpresso-Maschinerie braucht?
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: 712
Registriert: 22.02.2006 22:00
Wohnort: Berlin
Hat sich bedankt: 216 Mal
Danksagung erhalten: 25 Mal
Kontaktdaten:

Beitrag von hscha »

Hallo Markus,
Mich persönlich würde ja mal interessieren, wie komplex Dein forciertes Template ist, daß man dafür die ganze ressourcenfressende Conpresso-Maschinerie braucht?
Der Grund, warum ich das so machen möchte, ist folgender:
Wir haben auf der Schulwebseite Klassenseiten für momentan 25 Klassen. Info-Artikel, die ganze Jahrgänge oder Schulstufen betreffen, schreibe ich in eine Rubrik "Klasseninfos". Mit dem Platzhalter "adressat" weise ich den Artikel bestimmten Jahrgängen oder Stufen zu. Den Templates kommt die Aufgabe zu, mittels <!-- ifvalue...--> einen Artikel auszugeben oder nicht. Deshalb brauche ich die verschiedenen Templates.

Grüße von Horst

---------------
Ich habe jetzt select_template.php und functions.php geändert. Die Artikel werden trotzdem noch mit dem Standardtemplate ausgegeben. Sieht so aus, als wenn der Inhalt von $forcetemplate_id nicht ankommt...
Dateianhänge
template_klasseninfo_4-6_grundschule.txt
Template für die Grundschule, Klassenstufe 4-6
(5.48 KiB) 370-mal heruntergeladen
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Das sieht für mich jetzt so aus, als gäbe es nur ein Template, in dem mittels ifvalue jeweils ein anderes Aussehen gewählt wird.
oder sind das jetzt für 25 Klassen 25 Templates mit je 3 Adressaten?
Und das muß wirklich die Ausgabe einer Rubrik in einem Artikel sein?
Schade, daß Du nicht mal zeigst wie das wo aussieht...

Was meinst Du mit
Die Artikel werden trotzdem noch mit dem Standardtemplate ausgegeben
Standardtemplate ist das Standardtemplate der Rubrik oder meinst Du damit das individuell pro Artikel gewählte Template?
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: 712
Registriert: 22.02.2006 22:00
Wohnort: Berlin
Hat sich bedankt: 216 Mal
Danksagung erhalten: 25 Mal
Kontaktdaten:

Beitrag von hscha »

Hallo Markus,
Das sieht für mich jetzt so aus, als gäbe es nur ein Template, in dem mittels ifvalue jeweils ein anderes Aussehen gewählt wird.
oder sind das jetzt für 25 Klassen 25 Templates mit je 3 Adressaten?
Es sind 6 Templates: Jahrgang 1-3, Jahrgang 4-6 und für die Jahrgänge 7-10 je eines.
Und das muß wirklich die Ausgabe einer Rubrik in einem Artikel sein?
Schade, daß Du nicht mal zeigst wie das wo aussieht...
Das ist sonst sehr aufwändig, die Artikel einzupflegen...
Ansehen kann man das hier:
http://www.reformschule-charlottenburg. ... ic=klassen
Die Grundstufenklassen haben andere Infos, als die 7. oder 10. Klassen...

:)
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Da Du ja einen verhängnisvollen Hang zu Tippfehlern hast ... :wink: SCNR ... wie sieht denn jetzt Dein Code aus?

Du hattest ja zuletzt die (zu erwartende) Fehlermeldung wegen fehlendem $hdlr_parser_content gepostet und dann wie vorgegeben auch dieses globalisiert. Aber wie sah dann Dein Code aus?

Ich habe das mal vom nicht mit mod_functions zusammenhängenden Thread getrennt, sonst kapiert das keiner

Warum benutzt Du eigentlich nicht ein Einbinden mittels JS oder ein http-include?
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: 712
Registriert: 22.02.2006 22:00
Wohnort: Berlin
Hat sich bedankt: 216 Mal
Danksagung erhalten: 25 Mal
Kontaktdaten:

Beitrag von hscha »

So sieht die Funktion jetzt aus:

Code: Alles auswählen

function rubricinclude($rubric_id, $template_id, $artikelanzahl, $sortierung){
global $activeModules, $cpoSystem, $hdlr_parser_content, $placeholders_cache, $typeNames, $fetchedcontent;

switch ($sortierung){ 
	case 'manual': $sortierung = 'sort_id desc'; break;
	case 'index aufwärts': $sortierung = 'index asc'; break;
	case 'index abwärts': $sortierung = 'index desc'; break;
	default: $sortierung = 'sort_id desc';
}

$pagetype = 'php';

ob_start();

// datenbank-abfrage

$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='".$rubrik_id."' ORDER BY ".$sortierung." LIMIT 0," . $artikelanzahl . " ";
$db = new DB;
$db->query($query);

while($db->next_record()) {

    $db_template      = $template_id;
    $db_nr            = $db->v('nr');
    $db_idx           = $db->v('idx');
    $db_email         = $db->v('email');
    $db_autor         = $db->v('autor');
    $db_changer       = $db->v('changer');
    $db_pub_datum     = $db->v('pub_datum');
    $db_verfallsdatum = $db->v('verfallsdatum');
    $db_commentary    = $db->v('commentary');
    $db_titel         = $db->v('titel');
    $db_initial       = $db->v('initial');
    $db_freigabe      = $db->v('freigabe');
    $db_rubric_id     = $db->v('rubric_id');
    require(CPO_BASEDIR.'_include/select_template.php');

}

$rubriccontent = ob_get_contents();
ob_end_clean();

return $rubriccontent;
}
Im Moment mache ich das ja per http-include. Wenn ich jedoch alle Abfragen in eine Datei packe, dann wird die Seite schnarchlangsam.
Deshalb möchte ich das per Funktionsaufruf machen, der die Abfrage der Datenbank nur im entsprechenden Artikel startet.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Ist das wirklich Deine letzte Version?
Du übergibst $rubric_id, verwendest aber $rubrik_id
Hatten wir das nicht schon?
Es fehlt auch $hdlr_parser_replacement ...
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: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Ich habe mich einfach mal an getArticles orientiert, was das Globalisieren angeht:

Code: Alles auswählen

function rubricinclude ($rubric_id, $template_id, $artikelanzahl, $sortierung) {
    global $content, $db_autor, $db_changer, $db_content, $db_email,
        $db_idx, $db_initial, $db_last_modify, $db_nr, $db_pub_datum,
        $db_rubric_id, $db_template, $db_titel, $db_verfallsdatum,
        $fetchedcontent, $hdlr_parser_content, $hdlr_parser_replacement,
        $key, $_name, $parameters, $placeholder, $placeholders_cache,
        $replacement, $_type, $typeNames, $cpoSystem, $tl, $activeModules;
 

switch ($sortierung){ 
   case 'manual': $sortierung = 'sort_id desc'; break; 
   case 'index aufwärts': $sortierung = 'index asc'; break; 
   case 'index abwärts': $sortierung = 'index desc'; break; 
   default: $sortierung = 'sort_id desc'; 
} 

$pagetype = 'index'; 

ob_start(); 

// datenbank-abfrage 

$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='".$rubric_id."' ORDER BY ".$sortierung." LIMIT 0," . $artikelanzahl . " "; 
$db = new DB; 
$db->query($query); 

while($db->next_record()) { 

    $db_template      = $template_id; 
    $db_nr            = $db->v('nr'); 
    $db_idx           = $db->v('idx'); 
    $db_email         = $db->v('email'); 
    $db_autor         = $db->v('autor'); 
    $db_changer       = $db->v('changer'); 
    $db_pub_datum     = $db->v('pub_datum'); 
    $db_verfallsdatum = $db->v('verfallsdatum'); 
    $db_commentary    = $db->v('commentary'); 
    $db_titel         = $db->v('titel'); 
    $db_initial       = $db->v('initial'); 
    $db_freigabe      = $db->v('freigabe'); 
    $db_rubric_id     = $db->v('rubric_id'); 
    require(CPO_BASEDIR.'_include/select_template.php'); 

} 

$rubriccontent = ob_get_contents(); 
ob_end_clean(); 

return $rubriccontent;
}
Bei mir funzt das in Seitentemplates und in Artikeln problemlos...
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: 712
Registriert: 22.02.2006 22:00
Wohnort: Berlin
Hat sich bedankt: 216 Mal
Danksagung erhalten: 25 Mal
Kontaktdaten:

Beitrag von hscha »

Oh oh, diesmal hat mir der Schreibfehlerteufel aber mächtig auf der Schulter gesessen. Mit der Globalisierung aus getArticles funktioniert es!!!

1000 Dank, Markus!

Jetzt habe ich alles da, wo ich's haben möchte. Zum einen lässt sich alles im Backend erledigen und ich kann die Funktion in Templates einbauen...

Einen schönen Sonntag und Osterfest
wünscht dir
Horst aus Berlin
Antworten