Modul Inline

Diskussion zu nicht so umfangreichen Modulen und Start-Up für neue Module. Ansonsten bitte die speziellen Kategorien benutzen!
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7117
Registriert: 01.01.1970 02:00
Hat sich bedankt: 103 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Was geben diese Latest-News überhaupt aus?

Gib die Links zu den Profilen doch mal an und beschreibe kurz was jedes dieser Profile macht.

Wäre da nicht "Rubric-include mal anders" bereits ausreichend und viel schneller?
http://community.conpresso.de/viewtopic.php?t=3915

Dein Include Nr.2 sieht ja aus wie der neueste Artikel aus
http://www.wichern-radelandgemeinde.de/ ... gdradeland
und die Nr. 1 wie der neueste Artikel aus
http://www.wichern-radelandgemeinde.de/ ... =gdwichern
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: 534
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 199 Mal
Danksagung erhalten: 18 Mal

Beitrag von hscha »

Die Profile binden jeweils die 3 ersten Artikel von 3 Rubriken mit speziellen Templates ein (2spaltiges Layout).

Schön wäre es, wenn das mit den Platzhaltern wirklich funktionieren würde. Das könnte ich auch auf anderen Seiten anwenden...

Jedoch bringt mir die obige Datei als Postparsing auch auf anderen Rubrikseiten die gleiche Fehlermeldung, so dass ich sie erstmal wieder abgeschaltet habe...

Reicht das als Info?

Horst
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7117
Registriert: 01.01.1970 02:00
Hat sich bedankt: 103 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Also jeweils nur 1 Rubrik pro Einbindung?
Spezielle Templates abweichend von den im Artikel eingestellten und auch nicht das php-Template?

Mit "Rubric-include mal anders" lässt sich das ja problemlos machen, denn auch das Template lässt sich ja nach Bedarf einstellen.

Statt

Code: Alles auswählen

<?php 
$arr = get_defined_vars(); // alle Variablen sichern 
unset($_REQUEST, $_GET, $_POST, $pos, $nr); // was auch immer stören könnte 


ob_start(); 
   $_REQUEST['rubric'] = 23; // Gottesdienste 1 
   include(CPO_BASEDIR.'mod_latest_news/index_php.php'); 
   $tmpGetContent = ob_get_contents();                  
ob_end_clean(); 
$template_datei = str_replace("###GOTTESDIENSTE_1###",$tmpGetContent,$template_datei); 
ob_start(); 
   $_REQUEST['rubric'] = 24; // Gottesdienste 2 
   include(CPO_BASEDIR.'mod_latest_news/index_php.php'); 
   $tmpGetContent = ob_get_contents();                  
ob_end_clean(); 
$template_datei = str_replace("###GOTTESDIENSTE_2###",$tmpGetContent,$template_datei); 
ob_start(); 
   $_REQUEST['rubric'] = 25; // Gemeinde 
   include(CPO_BASEDIR.'mod_latest_news/index_php.php'); 
   $tmpGetContent = ob_get_contents();                  
ob_end_clean(); 
$template_datei = str_replace("###GEMEINDE###",$tmpGetContent,$template_datei); 


foreach(array_keys($arr) AS $arrkey=>$arrvalue) $$arrvalue = $arr[$arrvalue]; // alle Variablen wiederherstellen 
unset($arr); // die Sicherung löschen 

?> 
könnte man einfach

Code: Alles auswählen

<?php 

ob_start(); 
// Die Parameter 
$rubrikid = 23; // der ID der Rubrik 
$artikelanzahl = 3; // maximale Anzahl der auszugebenden Artikel 
$sortierung = 'idx, pub_datum desc'; // Art der Artikelsortierung 
$templates_id = 4711;

// ab hier nix mehr ändern 

$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); 

while($db->next_record()) { 

    $db_template      = $templates_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'); 

}
$tmpGetContent = ob_get_contents();                  
ob_end_clean(); 
$template_datei = str_replace("###GOTTESDIENSTE_1###",$tmpGetContent,$template_datei); 

ob_start(); 
	// das ganze nochmal für Gottesdienste 2 ...
	// ...
	// ...

$tmpGetContent = ob_get_contents();                  
ob_end_clean(); 
$template_datei = str_replace("###GOTTESDIENSTE_2###",$tmpGetContent,$template_datei); 

ob_start(); 
	// und noch einmal für die Gemeinde ...
	// ...
	// ...

$tmpGetContent = ob_get_contents();                  
ob_end_clean(); 
$template_datei = str_replace("###GEMEINDE###",$tmpGetContent,$template_datei); 


?> 
schreiben und sich das Speichern und Wiederherstellen von Variabeln schenken...

Bei Problemen müsste man ggf. $db durch was anderes wie $db_latest oder so ersetzen (weil man sonst in die Abarbeitung der Artikel reinpfuscht, was in einer separaten Spalte kein Problem darstellt)
Zuletzt geändert von MarkusR am 07.03.2010 23:05, insgesamt 3-mal geändert.
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: 534
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 199 Mal
Danksagung erhalten: 18 Mal

Beitrag von hscha »

Hallo Markus,

ich probier's morgen aus und melde mich!

Herzlichen Dank von
Horst
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 534
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 199 Mal
Danksagung erhalten: 18 Mal

Beitrag von hscha »

Hallo Markus,

ich habe folgende Datei über mod_parser_enhanced eingehängt:

Code: Alles auswählen

ob_start();
// Die Parameter:
$rubrikid = 7; 						// der ID der Rubrik
$artikelanzahl = 1; 					// maximale Anzahl der auszugebenden Artikel
$sortierung = 'idx, pub_datum desc'; 	// Art der Artikelsortierung
$templates_id = 18;					// template-id für die kurzanzeige

// ab hier nix mehr ändern

$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);

while($db->next_record()) {

    $db_template      = $templates_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');

}
$tmpGetContent = ob_get_contents();                 
ob_end_clean();
$template_datei = str_replace("###GDWICHERN###",$tmpGetContent,$template_datei); 
Diesen Code habe ich entsprechend angepasst für die zwei weiteren Rubriken eingefügt.
Dabei erhalte ich die folgende Fehlermeldung:
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 270336 bytes) in /mnt/.../htdocs/cms/_include/parser.php on line 265
Grüße von
Horst
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7117
Registriert: 01.01.1970 02:00
Hat sich bedankt: 103 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Mir schwant da böses...

das ist eine Endlosschleife, weil dieses Codestück im Parser eingebunden
wiederum den Parser aufruft, der wieder das Codestück einbindet, das
wiederum den Parser aufruft, der wieder das Codestück einbindet, das
wiederum den Parser aufruft, der wieder das Codestück einbindet, das
wiederum den Parser aufruft, der wieder das Codestück einbindet, das
wiederum den Parser aufruft, der wieder das Codestück einbindet, das
wiederum den Parser aufruft, der wieder das Codestück einbindet, das
wiederum den Parser aufruft, der wieder das Codestück einbindet, das
wiederum den Parser aufruft, der wieder das Codestück einbindet, das
wiederum den Parser aufruft, der wieder das Codestück einbindet, das
wiederum den Parser aufruft, der wieder das Codestück einbindet, das
wiederum den Parser aufruft, der wieder das Codestück einbindet, das

etc. und dann ist der Speicher verbraucht :twisted:

Ich denke nochmal nach...
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: 7117
Registriert: 01.01.1970 02:00
Hat sich bedankt: 103 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Nächster Versuch:

Da Du ja mod_pages benutzt schreibst Du in den header der Rubrik (nicht den Global Header) folgenden Code (den Du für die zwei anderen Rubriken wiederholst) oder erstellst eine entsprechende Datei, die Du dort im header includierst:

Code: Alles auswählen

<?php

ob_start(); 
// Die Parameter: 
$rubrikid = 7;                   // der ID der Rubrik 
$artikelanzahl = 1;                // maximale Anzahl der auszugebenden Artikel 
$sortierung = 'idx, pub_datum desc';    // Art der Artikelsortierung 
$templates_id = 18;               // template-id für die kurzanzeige 
$inline_name = 'GDWICHERN';  // Das ist neu: Name des Platzhalters, der dann im weiteren Verlauf benutzt wird

// ab hier nix mehr ändern 

$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); 

while($db->next_record()) { 

    $db_template      = $templates_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'); 

} 
$inlineReplace[$inline_name] = '###'.$inline_name.'###';
$inlineContent[$inline_name] = ob_get_contents();                  
ob_end_clean(); 

// Das jetzt für die anderen wiederholen...

?>
Damit sind die Inhalte festgelegt und in ein Array geladen.
Nun muß nur noch folgende Zeile im oder nach dem Pareser ausgeführt werden:

Code: Alles auswählen

<?php

$template_datei = str_replace($inlineReplace,$inlineContent,$template_datei); 

?>
Das kann natürlich auch eine Datei sein, die via mod_parser eingebunden wird.
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: 534
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 199 Mal
Danksagung erhalten: 18 Mal

done!

Beitrag von hscha »

Hallo Markus,

jetzt gehts mit Einschränkungen (siehe nächste Nachricht). Ich muss nur noch am Layout arbeiten, aber die Rubrikinhalte werden nun per Platzhalter eingebunden!

Vielen Dank von

Horst :D
Zuletzt geändert von hscha am 09.03.2010 16:21, insgesamt 2-mal geändert.
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 534
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 199 Mal
Danksagung erhalten: 18 Mal

Beitrag von hscha »

Hallo Markus,

es gibt noch ein kleines Problem:
Das Einbinden der Templates funktioniert, jedoch wird das Template der Detailseite geladen. Ist das Absicht oder wo ließe sich das steuern?

Vielen Dank für deine Mühe und
Gruß von
Horst
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7117
Registriert: 01.01.1970 02:00
Hat sich bedankt: 103 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Eigentlich ist
$pagetype = 'index';
immer Standard, bis man was anderes definiert.
Ist die Seite, in der Du das Zeug einbindest eine Index- oder Detailseite?
(durch Dein URL-rewriting kann ich das nicht nachvollziehen)

Du kannst ganz nach Bedarf
$pagetype = 'index';
oder
$pagetype = 'detail';
setzen bzw. zurücksetzen.
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: 534
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 199 Mal
Danksagung erhalten: 18 Mal

Beitrag von hscha »

Hallo Markus,

es ist eine Detail-Seite, deshalb wird wahrscheinlich auch das Detail-Template geladen.
An welcher Stelle im obigen Code müsste ich $pagetype='index'; einfügen?

Ich habe deinen Vorschlag im Übrigen schon auf der Webseite umgesetzt und das Laden der Willkommen-Seite dauert nur noch 1-2sec (ggü. 25-60sec ein Superfortschritt!).

Grüße aus Berlin von
Horst
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7117
Registriert: 01.01.1970 02:00
Hat sich bedankt: 103 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

Ganz am Anfang des Codes setzt Du
$pagetype = 'index';
und am Ende zurück auf
$pagetype = 'detail';
damit Deine Detailseite dargestellt werden kann.
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: 7117
Registriert: 01.01.1970 02:00
Hat sich bedankt: 103 Mal
Danksagung erhalten: 916 Mal

Beitrag von MarkusR »

bessere Idee...

am Anfang:
$pagetype_page = $pagetype;
$pagetype = 'index';

am Ende:
$pagetype = $pagetype_page;
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: 534
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 199 Mal
Danksagung erhalten: 18 Mal

Beitrag von hscha »

Prima, jetzt geht's!
Den letzten Tipp von dir habe ich (fast) genauso eingebaut...
1000 Dank!

Horst
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 534
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 199 Mal
Danksagung erhalten: 18 Mal

Beitrag von hscha »

Hallo Markus,

zu diesem Thema habe ich noch eine letzte (vielleicht unverschämte) Frage: Wie kann ich erreichen, dass beim Finden von NULL Artikeln nicht der Platzhalter, sondern eine "Es liegen zurzeit keine Artikel vor"-Meldung ausgegeben wird?

Grüße von
Horst