Rubric-Include per mod_functions
- MarkusR
- Handbuchversteher
- Beiträge: 7362
- Registriert: 01.01.1970 01:00
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 934 Mal
- Kontaktdaten:
Man kann es probieren.
Allerdings gibt es ja dafür ja <!-- Page: articles; --> in Seitentemplates.
Um was für einen Code geht es denn?
Allerdings gibt es ja dafür ja <!-- Page: articles; --> in Seitentemplates.
Um was für einen Code geht es denn?
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
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
- hscha
- ConPresso-Experte
- Beiträge: 714
- Registriert: 22.02.2006 22:00
- Wohnort: Berlin
- Hat sich bedankt: 217 Mal
- Danksagung erhalten: 26 Mal
- Kontaktdaten:
Hallo Markus,
es geht um etwas, das wie das hier http://community.conpresso.de/viewtopic ... 6724#26724 funktioniert. An der Stelle, wo der Funktionsaufruf steht, sollten die eingebundenen Artikel ausgegeben werden - so zumindest in der Fantasie. Das Ersetzen eines Platzhalters ###PLATZHALTER### im Artikelcode funktioniert leider nicht, wenn man den obigen Code einfach per mod_functions einbindet.
Grüße von
Horst
es geht um etwas, das wie das hier http://community.conpresso.de/viewtopic ... 6724#26724 funktioniert. An der Stelle, wo der Funktionsaufruf steht, sollten die eingebundenen Artikel ausgegeben werden - so zumindest in der Fantasie. Das Ersetzen eines Platzhalters ###PLATZHALTER### im Artikelcode funktioniert leider nicht, wenn man den obigen Code einfach per mod_functions einbindet.
Grüße von
Horst
- MarkusR
- Handbuchversteher
- Beiträge: 7362
- Registriert: 01.01.1970 01:00
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 934 Mal
- Kontaktdaten:
Ich nehme mal an, Du hast es nicht probiert, sonst hättest Du ja ein Ergebnis mitteilen können. Soll ich das jetzt machen???
Grundsätzlich zu Funktionen in PHP:
verwendet man in der Funktion eine Variable wie $cpoSystem, die nicht in der Funktion selbst definiert wurde, dann muß man sie erst globalisieren.
Und falls Du auch weitere Variablen benutzen willst, dann mußt Du diese auch globalisieren, z.B. $activeModules für alles, was mit Modulen zu tun hat.
Test doch einfach die Funktion in einer test.php im _rubric-Verzeichnis
Dann legst Du im Zweifel nicht den Webauftritt lahm und kannst hier Fehlermeldungen oder Ergebnisse posten.
Grundsätzlich zu Funktionen in PHP:
verwendet man in der Funktion eine Variable wie $cpoSystem, die nicht in der Funktion selbst definiert wurde, dann muß man sie erst globalisieren.
Und falls Du auch weitere Variablen benutzen willst, dann mußt Du diese auch globalisieren, z.B. $activeModules für alles, was mit Modulen zu tun hat.
Test doch einfach die Funktion in einer test.php im _rubric-Verzeichnis
Code: Alles auswählen
define('CPO', true);
require_once('../_include/common.inc.php');
$pagetype = 'index';
require(CPO_BASEDIR.'_include/var_category.php');
require(CPO_BASEDIR.'_include/secure.php');
include(CPO_BASEDIR.$directory.'/loadheaders.php');
function xyz($args) {
//code ...
}
echo xyz($args);
include(CPO_BASEDIR.$directory.'/loadfooters.php');
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
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
- hscha
- ConPresso-Experte
- Beiträge: 714
- Registriert: 22.02.2006 22:00
- Wohnort: Berlin
- Hat sich bedankt: 217 Mal
- Danksagung erhalten: 26 Mal
- Kontaktdaten:
Ok, dann nochmal konkret gefragt:
Folgender Code (siehe oben) funktioniert nicht über mod_functions:
Wie kann ich den Code so verändern, dass mir [!-- function: rubricinclude; --] die entsprechenden Artikel mit dem gewählten Template ausgibt. Leider funktioniert das so nicht. Ich habe es bereits probiert. Der Funktionsaufruf gefolgt von dem Platzhalter ###Klasse1-3### liefert nix.
Noch ein später Gruß aus Berlin von
Horst
Folgender Code (siehe oben) funktioniert nicht über mod_functions:
Code: Alles auswählen
$pagetype_page = $pagetype;
$anzahl_page = $anzahl;
$parsecount_page = $parsecount;
// klasseninfos klasse 10 ---------------------------------------------------------------
ob_start();
// Die Parameter:
$rubrikid = 32; // der ID der Rubrik
$artikelanzahl = 10; // maximale Anzahl der auszugebenden Artikel
$sortierung = 'sort_id desc'; // Art der Artikelsortierung: manuell
$templates_id = 13; // template-id für die anzeige
$inline_name = 'KLASSE1-3'; // 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();
$tmpContent = ob_get_contents();
$inlineContent[$inline_name] = (empty($tmpContent)) ? '' : $tmpContent;
ob_end_clean();
// --------------------------------------------------------------
// variablen wiederherstellen:
$pagetype = $pagetype_page;
$anzahl = $anzahl_page;
$parsecount = $parsecount_page;
Noch ein später Gruß aus Berlin von
Horst
- MarkusR
- Handbuchversteher
- Beiträge: 7362
- Registriert: 01.01.1970 01:00
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 934 Mal
- Kontaktdaten:
Du hast witzigerwiese vergessen die Variablen zu globalisieren und einen Rückgabewert (return) hast Du auch nicht.
Lies Dir doch mal die Doku zu mod_functions durch und fummel was in der Art zusammen
Wie sieht das im Klartext aus:
Lies Dir doch mal die Doku zu mod_functions durch und fummel was in der Art zusammen
Code: Alles auswählen
function FUNKTIONSNAME($argument1, $argument2 [,...] ) {
//hier kommt nun der Beispiel-Code ...
$ergebnis = $argument1 + $argument2;
return $ergebnis;
}
Wird die Funktion mit diesem Text als Argument aufgerufen oder folgt der Text der Funktion? Was ist an diesem Text ein Platzhalter?Der Funktionsaufruf gefolgt von dem Platzhalter ###Klasse1-3###
Zuletzt geändert von MarkusR am 23.03.2013 21:42, insgesamt 2-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
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
- hscha
- ConPresso-Experte
- Beiträge: 714
- Registriert: 22.02.2006 22:00
- Wohnort: Berlin
- Hat sich bedankt: 217 Mal
- Danksagung erhalten: 26 Mal
- Kontaktdaten:
Hallo Markus,
beim Globalisieren weiß ich gar nicht, wo ich anfangen soll. Die Fehlerbeschreibung "funktioniert nicht" habe ich ja wegen ihrer Beliebtheit gewählt ! Es passiert halt definitiv gar nichts. Beim Parsen wird auch keine Fehlermeldung ausgegeben.
O.k., ich mach mich mal ans Basteln und poste hier die Löcher und Fallstricke...
So long
Horst
beim Globalisieren weiß ich gar nicht, wo ich anfangen soll. Die Fehlerbeschreibung "funktioniert nicht" habe ich ja wegen ihrer Beliebtheit gewählt ! Es passiert halt definitiv gar nichts. Beim Parsen wird auch keine Fehlermeldung ausgegeben.
O.k., ich mach mich mal ans Basteln und poste hier die Löcher und Fallstricke...
So long
Horst
- MarkusR
- Handbuchversteher
- Beiträge: 7362
- Registriert: 01.01.1970 01:00
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 934 Mal
- Kontaktdaten:
Während dieses Posts habe ich meines noch überarbeitet:
Wie sieht das im Klartext aus:
Wie sieht das im Klartext aus:
Wird die Funktion mit diesem Text als Argument aufgerufen oder folgt der Text der Funktion? Was ist an diesem Text ein Platzhalter?Der Funktionsaufruf gefolgt von dem Platzhalter ###Klasse1-3###
Fange doch mal mit $activeModules und $cpoSystem an...beim Globalisieren weiß ich gar nicht, wo ich anfangen soll.
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
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
- hscha
- ConPresso-Experte
- Beiträge: 714
- Registriert: 22.02.2006 22:00
- Wohnort: Berlin
- Hat sich bedankt: 217 Mal
- Danksagung erhalten: 26 Mal
- Kontaktdaten:
Here we go:
Der Funktionsaufruf [!-- function: rubricinclude; rubric_id=32; template_id=11; artikelanzahl=10; sortierung=manual; --] liefert einen leeren String
Du siehst, dass das hier meine php-Kompetenzen übersteigt...
Horstgrüße
Code: Alles auswählen
function rubricinclude($rubric_id, $template_id, $artikelanzahl, $sortierung){
Code: Alles auswählen
global $activeModules, $cpoSystem, $rubric_id, $template_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';
}
// variablen sichern:
$pagetype_page = $pagetype;
$anzahl_page = $anzahl;
$parsecount_page = $parsecount;
ob_start();
// 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');
}
$rubriccontent = ob_get_contents();
ob_end_clean();
// --------------------------------------------------------------
// variablen wiederherstellen:
$pagetype = $pagetype_page;
$anzahl = $anzahl_page;
$parsecount = $parsecount_page;
return $rubriccontent;
}
Du siehst, dass das hier meine php-Kompetenzen übersteigt...
Horstgrüße
- MarkusR
- Handbuchversteher
- Beiträge: 7362
- Registriert: 01.01.1970 01:00
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 934 Mal
- Kontaktdaten:
Parameter, die Du der Funktion explizit übergibst, brauchst Du nicht zu globalisieren!
Bei
sollten $rubric_id, $template_id, $artikelanzahl, $Sortierung nicht globalisiert werden.
Das
und
kannst Du Dir sparen, weil Du Dich ja nicht im Seitencode sondern in einer Funktion befindest.
Dagegen solltest Du den pagetype aber auch mal setzen, denn ohne pagetype auch keine Ausgabe.
Du übergibst der Funktion übrigens eine Variable $rubric_id, die Du dann aber gar nicht benutzt. Stattdessen benutzt Du $rubricid, die aber gar nicht definiert ist und somit auch nichts enthalten kann, also leere Ausgabe. Tippfehler?
Bei
Code: Alles auswählen
function rubricinclude($rubric_id, $template_id, $artikelanzahl, $sortierung)
Das
Code: Alles auswählen
// variablen sichern:
$pagetype_page = $pagetype;
$anzahl_page = $anzahl;
$parsecount_page = $parsecount;
Code: Alles auswählen
// variablen wiederherstellen:
$pagetype = $pagetype_page;
$anzahl = $anzahl_page;
$parsecount = $parsecount_page;
Dagegen solltest Du den pagetype aber auch mal setzen, denn ohne pagetype auch keine Ausgabe.
Du übergibst der Funktion übrigens eine Variable $rubric_id, die Du dann aber gar nicht benutzt. Stattdessen benutzt Du $rubricid, die aber gar nicht definiert ist und somit auch nichts enthalten kann, also leere Ausgabe. Tippfehler?
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
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
- hscha
- ConPresso-Experte
- Beiträge: 714
- Registriert: 22.02.2006 22:00
- Wohnort: Berlin
- Hat sich bedankt: 217 Mal
- Danksagung erhalten: 26 Mal
- Kontaktdaten:
Hallo Markus,
so sieht der Code jetzt aus:
rubricid war wirklich ein Schreibfehler.
Leider wird immer noch ein leerer String zurückgegeben..
Horstgrüße
so sieht der Code jetzt aus:
Code: Alles auswählen
function rubricinclude ($rubric_id, $template_id, $artikelanzahl, $sortierung){
global $activeModules, $cpoSystem, $pagetype;
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();
// 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='".$rubrik_id."' 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');
}
$rubriccontent = ob_get_contents();
ob_end_clean();
return $rubriccontent;
}
Leider wird immer noch ein leerer String zurückgegeben..
Horstgrüße
- MarkusR
- Handbuchversteher
- Beiträge: 7362
- Registriert: 01.01.1970 01:00
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 934 Mal
- Kontaktdaten:
Du übergibst $rubric_id und $template_id
verwendest aber $rubrik_id und $templates_id
bitte korrigieren! (und schiebe das jetzt nicht auf PHP...)
Und bitte entferne $pagetype aus der Globalisierungsliste, weil Du ja nicht den Pagetype von außen haben willst!
Ich habe die Funktion ohne diese Fehler getestet, funzt problemlos.
verwendest aber $rubrik_id und $templates_id
bitte korrigieren! (und schiebe das jetzt nicht auf PHP...)
Und bitte entferne $pagetype aus der Globalisierungsliste, weil Du ja nicht den Pagetype von außen haben willst!
Ich habe die Funktion ohne diese Fehler getestet, funzt 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
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
- hscha
- ConPresso-Experte
- Beiträge: 714
- Registriert: 22.02.2006 22:00
- Wohnort: Berlin
- Hat sich bedankt: 217 Mal
- Danksagung erhalten: 26 Mal
- Kontaktdaten:
Shit happens!
Ich habe die Schreibweise korrigiert und gobal $pagetype rausgenommen. Immerhin passiert jetzt folgendes:
Fehlermeldung:
P.S: Ich verwende mod_parser 4.0
Ich habe die Schreibweise korrigiert und gobal $pagetype rausgenommen. Immerhin passiert jetzt folgendes:
Fehlermeldung:
Warning: Invalid argument supplied for foreach() in /mnt/webd/.../htdocs/cms/_include/parser.php on line 148
P.S: Ich verwende mod_parser 4.0
Zuletzt geändert von hscha am 23.03.2013 23:21, insgesamt 1-mal geändert.
- MarkusR
- Handbuchversteher
- Beiträge: 7362
- Registriert: 01.01.1970 01:00
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 934 Mal
- Kontaktdaten:
Dann globalisiere noch das, was da in der Zeile steht.
Ich gehe vom enhanced Parser aus, dann ist das
$hdlr_parser_replacement
am besten gleich dazu
$hdlr_parser_content, $placeholders_cache, $typeNames und $fetchedcontent
und alles, was noch bemängelt wird...
wobei ich immer noch nicht verstehe, warum Du nicht ein PHP-Template anlegst und dann die offizielle Version benutzt
<!-- Page: articles; id=32; pagetype=php; noOfArticles=10; sorting=sort_id desc; -->
Ich gehe vom enhanced Parser aus, dann ist das
$hdlr_parser_replacement
am besten gleich dazu
$hdlr_parser_content, $placeholders_cache, $typeNames und $fetchedcontent
und alles, was noch bemängelt wird...
wobei ich immer noch nicht verstehe, warum Du nicht ein PHP-Template anlegst und dann die offizielle Version benutzt
<!-- Page: articles; id=32; pagetype=php; noOfArticles=10; sorting=sort_id desc; -->
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
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
- hscha
- ConPresso-Experte
- Beiträge: 714
- Registriert: 22.02.2006 22:00
- Wohnort: Berlin
- Hat sich bedankt: 217 Mal
- Danksagung erhalten: 26 Mal
- Kontaktdaten:
O.k.,
habe ich gemacht. Wenn ich nur $hdlr_parser_replacement globalisiere, erhalte ich ca. 3 Meter sich wiederholend:
Sorry, Markus!
Ich danke dir für deine Mühe. Ich schaue morgen nochmal über den Code. Vllt. habe ich noch irgendwo einen blöden Schreibfehler gemacht, an dem wir uns jetzt nen Wolf suchen...
P.S:
So long und Grüße von
Horst
habe ich gemacht. Wenn ich nur $hdlr_parser_replacement globalisiere, erhalte ich ca. 3 Meter sich wiederholend:
Wenn ich alle von dir angegebenen Variablen globalisiere, ist alles still - zu still - es wird wieder ein leerer String ausgegeben.Warning: array_key_exists() expects parameter 2 to be array, null given in /mnt/webd/.../htdocs/cms/_include/parser.php on line 166
Sorry, Markus!
Ich danke dir für deine Mühe. Ich schaue morgen nochmal über den Code. Vllt. habe ich noch irgendwo einen blöden Schreibfehler gemacht, an dem wir uns jetzt nen Wolf suchen...
P.S:
Ich verwende keine Seitentemplates...wobei ich immer noch nicht verstehe, warum Du nicht ein PHP-Template anlegst und dann die offizielle Version benutzt
<!-- Page: articles; id=32; pagetype=php; noOfArticles=10; sorting=sort_id desc; -->
So long und Grüße von
Horst