RSS und OFA

astricia

Habe dein Snippet versucht, kriege folgende Fehlermeldung:

Parse error: syntax error, unexpected ''); ' (T_CONSTANT_ENCAPSED_STRING), expecting ',' or ')' in /...../rss-dbs2.php on line 51

dbs

Nochmal anderer Versuch.
Die angehängte rss ruft Snippet oneforall_anyitems auf.
Am Anfang der Datei kannst page_id und section_id vergeben oder schickst das in der URL mit.
In der include vom Snippet sollte dein loop also enthalten was du möchtest.

Könntest auch mal deine rss anhängen, sieht für mich so aus als ob du was anderes hast als ich.
[url="https://onkel-franky.de"]https://onkel-franky.de[/url]

astricia

Stimmt, so lautet der Schleifenaufruf. Aber dieses $result wird ja nie wieder verwendet..? Wie kommt denn die erste description-Schleife dann zu ihrem Inhalt?

Ich hab jetzt gedacht, vielleicht liegt es auch daran, dass ich beide Male $sql als Variable genommen habe. Habe das jetzt für das Datumsfeld umbenannt, und beide Schleifen auch direkt hintereinander gesetzt. Also

        while ($item = $result->fetchRow( MYSQLI_ASSOC )) {
            // switch between group description and field description
            $sql='SELECT `value` FROM `'.TABLE_PREFIX.'mod_'.$mod_name.'_item_fields` '
              .  'WHERE `field_id` = '.(int)$iDescID.' '
              .  'AND `item_id` = '.(int)$item['item_id'].' ';
            $sql4='SELECT `value` FROM `'.TABLE_PREFIX.'mod_'.$mod_name.'_item_fields` '
              .  'WHERE `field_id` = '.(int)$iDateID.''
              .  'AND `item_id` = '.(int)$item['item_id'].' ';             
            $sDescriptionField = $database->get_one($sql);
            $description = (!$iDescID ? stripslashes($item['description']) : $sDescriptionField);
            $sDateField = $database->get_one($sql4);
            $date = (!$iDateID ? stripslashes($item['date']) : $sDateField); 


Dann wieder der Aufruf mit
<description><![CDATA[<?php echo $description?> (<?php echo $date?>)]]></description>

Die Klammer ist leider immer noch leer. $date hat keinen Inhalt. Warum nicht???

Menno.. ich bin halt kein Programmierer. Weiß denn niemand, wie das geht?

Büddeeee....

LG,
Astrid


dbs

Das Problem ist die while Schleife durchläuft nur das Ergebnis von $result, nicht von $sDateField
     //Generating the news items
     while ($item = $result->fetchRow( MYSQLI_ASSOC )) {


Ich weiß leider nicht wie man das löst.
[url="https://onkel-franky.de"]https://onkel-franky.de[/url]

astricia

Quote from: dbs on July 02, 2019, 03:31:29 PM
Wahrscheinlich ist deine rss.php URL hinten mit &desc_id=2  oder
weiter oben im Script ist $iDescID = 2; definiert.

Ja, genau. Die Abfrage läuft über .../rss-ofa.php?page_id=40&desc_id=2

Quote
Diese Abfrage holt genau 1 Ergebnis wegen $database->get_one($sql). Soll es mehr holen brauchts wieder eine Schleife um alles auszugeben. Oder so.

Das habe ich probiert. Erst mal um das Datumsfeld mit auszugeben. So bin ich vorgegangen:
Weiter oben im Script zur Definition:
    $iDescID    =  (isset($_GET['desc_id']) AND is_numeric($_GET['desc_id'])) ? $_GET['desc_id'] : '';
    $iDateID    =  (isset($_GET['date_id']) AND is_numeric($_GET['date_id'])) ? $_GET['date_id'] : '';


Hinter der bereits oben zitierten Schleife noch eine wie folgt:
            $sql='SELECT `value` FROM `'.TABLE_PREFIX.'mod_'.$mod_name.'_item_fields` '
              .  'WHERE `field_id` = '.(int)$iDateID.''
              .  'AND `item_id` = '.(int)$item['item_id'].' ';
            $sDateField = $database->get_one($sql);
            $date = (!$iDateID ? stripslashes($item['date']) : $sDateField);


Dann gibt es danach noch ein
            $description = OutputFilterApi('WbLink|ReplaceSysvar', $description);
Da habe ich analog diese Zeile dahinter gesetzt:
            $date = OutputFilterApi('WbLink|ReplaceSysvar', $date);

Und dann die Ausgabe wie folgt gestaltet:
<description><![CDATA[<?php echo $description?> (<?php echo $date?>)]]></description>

Laut meiner Logik müsste ein Aufruf mit
.../rss-ofa.php?page_id=40&desc_id=2&date_id=4
jetzt das Datum in Klammern dahintersetzen.

Tut es aber nicht. Die Klammern werden aufgerufen, bleiben aber ohne Inhalt.

Was habe ich falsch gemacht?

dbs

QuoteWoher weiß die obige Abfrage, dass es FIELD_2 nehmen soll?
Wahrscheinlich ist deine rss.php URL hinten mit &desc_id=2  oder
weiter oben im Script ist $iDescID = 2; definiert.

Diese Abfrage holt genau 1 Ergebnis wegen $database->get_one($sql). Soll es mehr holen brauchts wieder eine Schleife um alles auszugeben. Oder so.
[url="https://onkel-franky.de"]https://onkel-franky.de[/url]

evaki

#56
Dies ist keine Antwort auf die Aufgabenstellung.

Hatte noch nie OFA in Gebrauch, aber nun... - aber nur mal um reinzuschauen.
Das war's aber auch schon, nach der Meldung:
Warning: require(../../index.php): failed to open stream: No such file or directory in
\html\reserviert02\august-von-der-basis.php on line 7

Fatal error: require(): Failed opening required '../../index.php' (include_path='.;\PHP\PEAR;\PHP') in
\html\reserviert02\august-von-der-basis.php on line 7


<?php
$page_id    
6;
$section_id 96;
$item_id    1;
$item_sid   96;
define("ITEM_ID",  $item_id);
require(
"../../index.php");
?>


OFA 2.0.2.23 / WB2.12.1
Welche Anwendung nun den Fehler (Pfad zur index) verursacht - keene Ahnung.

ps. <description><![CDATA[<?php echo $description; ?></description>
      <description><![CDATA[<?php echo $description; ?>]]></description>

astricia

Ich versuche jetzt mal die rss-ofa.php zu verstehen, die ich aktuell einsetze.

Das Description-Feld wird wie folgt mit Inhalt gefüllt:
            $sql='SELECT `value` FROM `'.TABLE_PREFIX.'mod_'.$mod_name.'_item_fields` '
              .  'WHERE `field_id` = '.(int)$iDescID.' '
              .  'AND `item_id` = '.(int)$item['item_id'].' ';
            $sDescriptionField = $database->get_one($sql);
            $description = (!$iDescID ? stripslashes($item['description']) : $sDescriptionField);


und anschließend

<description><![CDATA[<?php echo $description?></description>

Damit kommt genau der Inhalt des [FIELD_2] in den description-Tag. Woher weiß die obige Abfrage, dass es FIELD_2 nehmen soll? FIELD_4 ist auch ein WYSIWIG-Feld, es gibt insgesamt 4 Felder... ? Kann ich nicht eine weitere Abfrage einbauen, die auf die anderen Felder abzielt und diese dann auch in den Description-Tag setzen?

LG,
Astrid

dbs

Vergiss das mal wieder mit der Seite und dem Snippet.

Das Snippet in der rss.php geht, aber nur zu 80%.
- Droplets werden nicht aufgelöst.
- Das Bild aus Media wird nicht gefunden, weil der Pfad nicht den Medienordner enthält.

Läuft wohl doch auf Uwes Lösung raus.
[url="https://onkel-franky.de"]https://onkel-franky.de[/url]

dbs

Die Fehlermeldung sagt was von filterCssToHead. Könntest du nach suchen dann.
Würdest du einiges finden, unter anderem dies:
https://forum.WebsiteBaker.org/index.php/topic,31518.msg220540.html#msg220540

War ja auch nur eine Idee mit dem Snippet. Ob es geht habe ich nicht probiert.
Stattdessen hatte ich versucht die Snippet Funktion in der rss.php aufzurufen. Das ging nur teilweise.
[url="https://onkel-franky.de"]https://onkel-franky.de[/url]

astricia

Ansonsten - bei Uwe persönlich vorbeischauen ist wohl aufgrund der Entfernung nicht möglich.

Da es sich um ein Kundenprojekt handelt, ist da also durchaus Budget vorhanden. Wenn sich dem jemand annehmen möchte, und dafür entsprechend bezahlt werden möchte, dann sagt mir das einfach... das sollte kein Problem sein! Hauptsache, Kunde ist glücklich und die Website kann dann bald auch freigeschaltet werden....

astricia

Den Vorschlag mit Anyitems-Umbau ab ich jetzt mal probiert. Da kommt dann erst mal folgende Fehlermeldung:

There was an uncatched exception
malformed document created
in line (67) of (/modules/output_filter/filters/filterCssToHead.php):


Liegt am Blank Template?

dbs

Vielleicht ist es auch eine Idee die Ausgabe von oneforall_anyitems bzw. einer Abwandlung davon zu nutzen.
Einfach das XML Gedöns drumrum bauen.

Das Snippet liefert einen Loop. Header und Footer können leer sein. Der Loop bekommt noch das <item></item> drumrum.
Innerhalb vom Loop baut man die Struktur wie jetzt im RSS.
Snippetaufruf auf einer Seite mit Template blank.
[url="https://onkel-franky.de"]https://onkel-franky.de[/url]

dbs

Ich sage mal der Uwe war da nicht nur gedanklich so weit fortgeschritten, dass sich mit "mal reinschauen" nicht viel machen lässt.
Fahr lieber mal persönlich bei ihm vorbei wegen der Sache.  :)
Am Besten noch mit Geld drohen.
[url="https://onkel-franky.de"]https://onkel-franky.de[/url]

astricia

Dann frage ich jetzt noch mal alle, da mein Problem weiterhin besteht ...

Ich möchte eine rss.php aus einem OFA-Modul generieren. Ich brauche dazu aber in der <description> ... </description> mehr als nur EIN Feld aus OFA! Das Bild (über Bild-Upload) hochgeladen konnte ich ja inzwischen integrieren - nicht aber das Bildcopyright (ist ein eigenes Feld). Außerdem möchte ich bei <pubDate>..</pubDate> nicht das Datum der Veröffentlichung haben, sondern ein Datums-Feld aus OFA (da ich dort Meldungen der letzten 10 Jahre manuell importieren werde - das Veröffentlichungsda tum ist somit immer 2019, aber das eigentliche Datum liegt bis zu 10 Jahre zurück!). Oder <pubDate> komplett ausschalten, dafür das Feld aber in die Description mit einbauen.

Momentan enthält die Schleife also:
Code: [Select]

<description>[IMAGE] [FIELD_2]</description>


Ich brauche aber sowas wie:
Code: [Select]

<description>
[IMAGE]
<div class="bildunterschrift">[FIELD_3]</div>
<li>[FIELD_2] ([FIELD_1])</li>
</description>


Feld 1 ist Datum - Feld 3 ist das Bildcopyright.

Wie bekomme ich das hin? Der Kunde hatte bei seiner vorigen (statischen) Website bereits einmal eine Abmahnung wegen fehlendem Bild-Copyright im RSS-Feed und ist da sehr empfindlich! Das muss also vor Freischaltung gelöst sein!

LG,
Astrid

astricia

Hallo Uwe,

ich weiß, es ist schon wieder einige Zeit vergangen.... aber die Website meines Kunden soll jetzt bald online gehen. Es fehlt uns immer noch die Lösung, wie wir im RSS-Feed aus dem OFA-Modul weitere Felder (Datum und Copyright-Hinweis) auslesen können. Hast du da inzwischen eine Lösung für mich?

LG,
Astrid

astricia

Hallo Uwe,

wie weit bist du denn mit dem RSS-Feed...? Ich hab morgen den Termin beim Kunden.....

LG,
Astrid

astricia

Quote from: jacobi22 on May 08, 2019, 04:24:18 PM
Grundsätzlich sollte ja das gleiche Problem auch in der view.php des Moduls auftreten und da wirst du es wohl über die Position lösen (müssen)

Da ist bei OFA selbst gar kein Problem - das Erstellungsdatum eines Eintrages ist gar kein vorgegebenes Feld. In der Schleife rufe ich das entsprechende Datumsfeld auf und gut ist.

Sagst du mir Bescheid, wenn du das mit dem RSS soweit fertig hast? Danke! :-D

Gast

QuoteDas mit der Sortierung klingt logisch - vielleicht geht es auch noch, dass nach einem bestimmten (Datums-)Feld sortiert wird... ? In meinem Fall jetzt, wo ich die News-Artikel der letzten Jahre von der alten statischen Website auf WB übertragen muss, stimmt das Publication-Datum natürlich nicht. Ich habe ein gesondertes Feld "Datum", bei dem man manuell das Veröffentlichungsdatum setzt.

das für deine eine Installation umzusetzen, ist sicher kein Problem, weil da die Felder und deren Inhalte halt feststehen und dann kann man eben gezielt nach Feld X abfragen, aber für die Allgemeinheit ist das nichts. OFA selbst hat schon 4 Möglichkeiten, ein Datum einzutragen. Ich nutze keine davon, ich schreibe es in ein Textfeld. Wie soll man da erkennen, was Text und was Datum ist?

Grundsätzlich sollte ja das gleiche Problem auch in der view.php des Moduls auftreten und da wirst du es wohl über die Position lösen (müssen)

Den Spaß mit den Feldern muß ich mir anschauen. Noch ein Join dazu, ist sicher kein Problem, dann werden halt drei statt zwei Tabellen ausgelesen, aber von der Theorie her bin ich nicht überzeugt, das das am Ende noch valider Code wird. Nach meiner Meinung geht es eh schon darüber hinaus, was ein RSS-Feed bringen soll (und darf)

astricia

Quote from: jacobi22 on May 08, 2019, 12:19:13 PM
@astrid: dafür das du es dringend benötigst, gibst du erstaunlich wenig Input  :cry:
Erfahrungsgemäß kommt das Geschrei dann erst, wenn etwas veröffentlicht wurde  :|

Sorry, aber ich hab die Frage gar nicht verstanden... irgendwie reden wir aneinander vorbei... ?

Das "Foto (c): " steht bei mir bei den Eingabefeldern. Also statt
<dl class="mod_bilderkatalog_text_f">
  <dt class="mod_bilderkatalog_field_label_f">[CUSTOM_LABEL]</dt>
  <dd class="mod_bilderkatalog_field_content_f">[CUSTOM_CONTENT]</dd>
</dl>

habe ich den Inhalt des Feldes 4 mit
Foto (c): [CUSTOM_CONTENT]
gefüllt.

Du schriebst doch weiter oben, dass das nicht geht mit dem Inhalt des [FIELD_4], sondern eben nur [CUSTOM_CONTENT] und [CUSTOM_LABEL] - und ich habe mich gefragt, warum nicht, da ich den Inhalt bei meinen OFA-Modulen oft in dieser Art verändere, dass ein bestimmter Text da fest mit eingebunden wird, der Eingebende das aber nicht jedes Mal wortwörtlich mit eintippen muss.

Das mit der Sortierung klingt logisch - vielleicht geht es auch noch, dass nach einem bestimmten (Datums-)Feld sortiert wird... ? In meinem Fall jetzt, wo ich die News-Artikel der letzten Jahre von der alten statischen Website auf WB übertragen muss, stimmt das Publication-Datum natürlich nicht. Ich habe ein gesondertes Feld "Datum", bei dem man manuell das Veröffentlichungsdatum setzt.

LG,
Astrid

Gast

@astrid: dafür das du es dringend benötigst, gibst du erstaunlich wenig Input  :cry:
Erfahrungsgemäß kommt das Geschrei dann erst, wenn etwas veröffentlicht wurde  :|



Zur Sortierung: in allen bei mir vorhandenen Varianten der rss.php war die Sortierung fest im Select verankert und überall auf modified_when DESC festgelegt, also Datum der letzten Änderung, das zuletzt geänderte steht oben in der Liste. Ich habe dafür einen weiteren Schalter gesetzt, ich denke, er sollte verständlich sein

// sort items by...  / default = modified_when DESC
// 1 = modified_when DESC
// 2 = modified_when ASC
// 3 = item_id DESC
// 4 = item_id ASC
// 5 = position DESC
// 6 = position ASC
// 7 = title DESC
// 8 = title ASC
$iItemsOrder = 8;


in meinen aktuellen Test's stimmt die jeweils gewählte Reihenfolge in der XML-Datei wohl mit der Einstellung überein und bringt auch die vorhandenen Items, im RSS-Reader ist das aber alles durcheinander. Der scheint seine eigene Einstellung zu haben.

Gast

QuoteAber z.B. ein "Foto (c): " vor dem eingegebenen Inhalt macht in meinem Fall durchaus Sinn

die Frage, wo das Foto(c) hingeschrieben wurde, ist aber damit auch nicht beantwortet. Alles, was im Feld steht (mein Bild mit Eintrag "Ella 1") wird zum [CUSTOM_CONTENT], ob mit oder ohne Foto(c), aber ich denke, wir sprechen von unterschiedlichen Sachen, vielleicht auch von unterschiedlichen OFA-Versionen

astricia

Quote from: jacobi22 on May 06, 2019, 12:56:20 PM
Was aber nicht geht, ist das HTML-Gerüst so auslesen, wie auch OFA das in seiner Frontendausgabe macht, also z.B. solch Code aus den Eingabefeldern

<dl class="mod_bilderkatalog_text_f">
  <dt class="mod_bilderkatalog_field_label_f">[CUSTOM_LABEL]</dt>
  <dd class="mod_bilderkatalog_field_content_f">[CUSTOM_CONTENT]</dd>
</dl>


das wird dann doch zu komplex

Warum wird das denn zu komplex? Die ganzen Standard-Klassen lösche ich meist sowieso raus und baue gewünschte Klassen eher in die Ausgabeschleife bei OFA ein. Aber z.B. ein "Foto (c): " vor dem eingegebenen Inhalt macht in meinem Fall durchaus Sinn. Hier ist nicht jedes Bild mit einem Copyright-Hinweis belegt (manches sind eben auch eigene Bilder), und ich will diesen Hinweis nur da stehen haben, wenn es auch einen Hinweis gibt. Wenn ich stattdessen jetzt den Feldnamen nehmen würde (der heißt bei mir Bildcopyright, aber ich kann ihn ja theoretisch auch in "Foto (c)" umbenennen), dann würde da der Feldname auch stehen, wenn das Feld gar keinen Inhalt hat, und das wäre eher unschön...

LG,
Astrid

Gast

QuoteDas [FIELD_4] von OFA hat den Inhalt "Foto: © [CUSTOM_CONTENT]", also ein "Foto: © " vor den eigentlichen Copyright-Hinweis. Da wäre es natürlich gut, wenn das in dem RSS-Feed identisch oder ähnlich wäre - also eben steuerbar. Momentan wird in der Schleife nur der [CUSTOM_CONTENT] ausgegeben, nicht aber das [FIELD_4], also eben nur der eingegebene Text ohne das "Foto: © " 

Wenn wir uns hier richtig verstehen....

Ich nutze es bei mir für einen Bilderkatalog einer Malerin. Da schaut es so aus


vorn das sog. Label, dahinter der Wert, hier z.b. Entstehungsjahr als Label, 2013 als Wert

Für das Label hätte ich einen Schalter, zeige das dazugehörige Label immer an: Ja oder Nein
Bei JA würde diese Ausgabe erscheinen:
Entstehungsjahr: 2013

Bei NEIN nur
2013

aber eben dann für alle übergebenen Felder gleich. In meinem Beispiel also nicht für Name des Bildes und für Entstehungsjahr getrennt schaltbar.

Was aber nicht geht, ist das HTML-Gerüst so auslesen, wie auch OFA das in seiner Frontendausgabe macht, also z.B. solch Code aus den Eingabefeldern

<dl class="mod_bilderkatalog_text_f">
  <dt class="mod_bilderkatalog_field_label_f">[CUSTOM_LABEL]</dt>
  <dd class="mod_bilderkatalog_field_content_f">[CUSTOM_CONTENT]</dd>
</dl>


das wird dann doch zu komplex

astricia

Ja, verstehe schon, dass das kompliziert ist. Sorry, dass ich das zwei Wochen vernachlässigt habe - ist halt manchmal so, dass da andere Arbeiten zwischengeschoben werden und dann das, was man eigentlich noch machen wollte, in Vergessenheit gerät.

Das mit den Schaltern klingt perfekt - insbesondere auch das Limit auf eine bestimmte Anzahl oder ein bestimmtes Datum (wobei da würde ich nicht Datum nehmen, sondern heutiges Datum minus x Tage - also immer nur die Nachrichten des letzten Monats, der letzten Woche oder was auch immer - bei einem konkreten Datum müsste man das ja sonst ständig ändern..).

Und ja, natürlich wäre es auch optimal, wenn man da die Ausgabe noch irgendwie steuern könnte, so ähnlich wie man das bei OFA selbst ja auch steuert. Konkret habe ich jetzt z.B. das Feld 4 mit dem Copyright-Hinweis belegt. Das [FIELD_4] von OFA hat den Inhalt "Foto: © [CUSTOM_CONTENT]", also ein "Foto: © " vor den eigentlichen Copyright-Hinweis. Da wäre es natürlich gut, wenn das in dem RSS-Feed identisch oder ähnlich wäre - also eben steuerbar. Momentan wird in der Schleife nur der [CUSTOM_CONTENT] ausgegeben, nicht aber das [FIELD_4], also eben nur der eingegebene Text ohne das "Foto: © " 

Liebe Grüße,
Astrid