ConPresso Community

Fragen, Antworten, Diskussionen rund um das Content Management System ConPresso

 
Rubric-Include per mod_functions
Gehe zu Seite 1, 2  Weiter
 
Neue Antwort erstellen    ConPresso Community Foren-Übersicht -> Implementierung/Anpassung ConPresso 4
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
hscha
ConPresso-Checker


Anmeldungsdatum: 22.02.2006
Beiträge: 496
Wohnort: Berlin

BeitragVerfasst am: 23.03.2013 19:06    Titel: Antworten mit Zitat

Hallo!

Kann man das Rubric-Include eigentlich auch als Funktion in mod_functions einbinden?

Grüße von
Horst
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 6994

BeitragVerfasst am: 23.03.2013 19:19    Titel: Antworten mit Zitat

Man kann es probieren.

Allerdings gibt es ja dafür ja <!-- Page: articles; --> in Seitentemplates.

Um was für einen Code geht es denn?

_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
hscha
ConPresso-Checker


Anmeldungsdatum: 22.02.2006
Beiträge: 496
Wohnort: Berlin

BeitragVerfasst am: 23.03.2013 20:33    Titel: Antworten mit Zitat

Hallo Markus,

es geht um etwas, das wie das hier http://community.conpresso.de/viewtopic.php?p=26724#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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 6994

BeitragVerfasst am: 23.03.2013 20:49    Titel: Antworten mit Zitat

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
Code:
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');

Dann legst Du im Zweifel nicht den Webauftritt lahm und kannst hier Fehlermeldungen oder Ergebnisse posten.

_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
hscha
ConPresso-Checker


Anmeldungsdatum: 22.02.2006
Beiträge: 496
Wohnort: Berlin

BeitragVerfasst am: 23.03.2013 21:26    Titel: Antworten mit Zitat

Ok, dann nochmal konkret gefragt:
Folgender Code (siehe oben) funktioniert nicht über mod_functions:
Code:

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

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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 6994

BeitragVerfasst am: 23.03.2013 21:34    Titel: Antworten mit Zitat

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
Code:
function FUNKTIONSNAME($argument1, $argument2 [,...] )  {
    //hier kommt nun der Beispiel-Code ...
    $ergebnis = $argument1 + $argument2;
    return $ergebnis;
}

Wie sieht das im Klartext aus:
Zitat:
Der Funktionsaufruf gefolgt von dem Platzhalter ###Klasse1-3###

Wird die Funktion mit diesem Text als Argument aufgerufen oder folgt der Text der Funktion? Was ist an diesem Text ein Platzhalter?

_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7


Zuletzt bearbeitet von MarkusR am 23.03.2013 21:42, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
hscha
ConPresso-Checker


Anmeldungsdatum: 22.02.2006
Beiträge: 496
Wohnort: Berlin

BeitragVerfasst am: 23.03.2013 21:41    Titel: Antworten mit Zitat

Hallo Markus,

beim Globalisieren weiß ich gar nicht, wo ich anfangen soll. Die Fehlerbeschreibung "funktioniert nicht" habe ich ja wegen ihrer Beliebtheit gewählt Laughing ! 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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 6994

BeitragVerfasst am: 23.03.2013 21:43    Titel: Antworten mit Zitat

Während dieses Posts habe ich meines noch überarbeitet:

Wie sieht das im Klartext aus:
Zitat:
Der Funktionsaufruf gefolgt von dem Platzhalter ###Klasse1-3###

Wird die Funktion mit diesem Text als Argument aufgerufen oder folgt der Text der Funktion? Was ist an diesem Text ein Platzhalter?

Zitat:
beim Globalisieren weiß ich gar nicht, wo ich anfangen soll.

Fange doch mal mit $activeModules und $cpoSystem an...

_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
hscha
ConPresso-Checker


Anmeldungsdatum: 22.02.2006
Beiträge: 496
Wohnort: Berlin

BeitragVerfasst am: 23.03.2013 22:24    Titel: Antworten mit Zitat

Here we go:
Code:
function rubricinclude($rubric_id, $template_id, $artikelanzahl, $sortierung){

Code:

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;
}

Der Funktionsaufruf [!-- function: rubricinclude; rubric_id=32; template_id=11; artikelanzahl=10; sortierung=manual; --] liefert einen leeren String Rolling Eyes

Du siehst, dass das hier meine php-Kompetenzen übersteigt...
Horstgrüße
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 6994

BeitragVerfasst am: 23.03.2013 22:31    Titel: Antworten mit Zitat

Parameter, die Du der Funktion explizit übergibst, brauchst Du nicht zu globalisieren!
Bei
Code:
function rubricinclude($rubric_id, $template_id, $artikelanzahl, $sortierung)

sollten $rubric_id, $template_id, $artikelanzahl, $Sortierung nicht globalisiert werden.
Das
Code:
// variablen sichern:
$pagetype_page = $pagetype;
$anzahl_page = $anzahl;
$parsecount_page = $parsecount;

und
Code:
// variablen wiederherstellen:
$pagetype = $pagetype_page;
$anzahl = $anzahl_page;
$parsecount = $parsecount_page;

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?

_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
hscha
ConPresso-Checker


Anmeldungsdatum: 22.02.2006
Beiträge: 496
Wohnort: Berlin

BeitragVerfasst am: 23.03.2013 22:53    Titel: Antworten mit Zitat

Hallo Markus,
so sieht der Code jetzt aus:
Code:

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;
}

rubricid war wirklich ein Schreibfehler.
Leider wird immer noch ein leerer String zurückgegeben..
Sad
Horstgrüße
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 6994

BeitragVerfasst am: 23.03.2013 23:07    Titel: Antworten mit Zitat

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.

_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
hscha
ConPresso-Checker


Anmeldungsdatum: 22.02.2006
Beiträge: 496
Wohnort: Berlin

BeitragVerfasst am: 23.03.2013 23:13    Titel: Antworten mit Zitat

Shit happens!

Ich habe die Schreibweise korrigiert und gobal $pagetype rausgenommen. Immerhin passiert jetzt folgendes:
Fehlermeldung:
Zitat:
Warning: Invalid argument supplied for foreach() in /mnt/webd/.../htdocs/cms/_include/parser.php on line 148


Confused

P.S: Ich verwende mod_parser 4.0


Zuletzt bearbeitet von hscha am 23.03.2013 23:21, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 6994

BeitragVerfasst am: 23.03.2013 23:20    Titel: Antworten mit Zitat

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

_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
hscha
ConPresso-Checker


Anmeldungsdatum: 22.02.2006
Beiträge: 496
Wohnort: Berlin

BeitragVerfasst am: 23.03.2013 23:35    Titel: Antworten mit Zitat

O.k.,
habe ich gemacht. Wenn ich nur $hdlr_parser_replacement globalisiere, erhalte ich ca. 3 Meter sich wiederholend:
Zitat:
Warning: array_key_exists() expects parameter 2 to be array, null given in /mnt/webd/.../htdocs/cms/_include/parser.php on line 166


Wenn ich alle von dir angegebenen Variablen globalisiere, ist alles still - zu still - es wird wieder ein leerer String ausgegeben.
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:
Zitat:
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 verwende keine Seitentemplates...

So long und Grüße von
Horst
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neue Antwort erstellen    ConPresso Community Foren-Übersicht -> Implementierung/Anpassung ConPresso 4 Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen