Überprüfe ob ein Online-Nicht-Startartikel in Idcat ist

Gesperrt
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Überprüfe ob ein Online-Nicht-Startartikel in Idcat ist

Beitrag von derSteffen » Fr 11. Okt 2013, 11:58

Hallo Community,

ich möchte gerne schauen ob in Kategorie (idcat 9) neben den immer vorhandenen Startartikel der auch online ist, sich auch ein Online-Nicht-Startartikel befindet.

Über Tipss wäre ich sehr dankbar.

Vielen Dank

MFG Steffen

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Überprüfe ob ein Online-Nicht-Startartikel in Idcat ist

Beitrag von Faar » Mo 14. Okt 2013, 11:26

Mehr Info wäre schon gut, denn "schauen" kann man ganz einfach, in dem man ins Backend geht und unter "Artikel" schaut, ob da noch mehr Artikel in dieser Kategorie sind. :wink:
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Überprüfe ob ein Online-Nicht-Startartikel in Idcat ist

Beitrag von xmurrix » Di 15. Okt 2013, 07:25

Morgen derSteffen,

mit folgendem Codebeispiel solltest du einen Online-Nicht-Startartikel aus einer Kategorie ermitteln können:

Code: Alles auswählen

cInclude('classes', 'class.article.php');

$articleColl = new ArticleCollection(array(
    'idcat' => 9,
    'lang' => $lang,
    'client' => $client,
    'start' => false, // Nicht Start-Artikel
    'offline' => false, // Nicht Offline-Artikel, also online
    'limit' => 1, // Nur einen Datensatz
    'order' => 'created', // optional der Spaltenname (Tabelle con_art_lang) nach dem sortiert werden soll, default Wert ist 'created'
    'direction' => 'DESC', // optional die Sortierrichtung, default Wert ist 'DESC'
));

$article = $articleColl->nextArticle();
if ($article) {
    $myidart = $article->get('idart');
}
Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Überprüfe ob ein Online-Nicht-Startartikel in Idcat ist

Beitrag von derSteffen » Mi 16. Okt 2013, 20:30

Oh .. Hallo xmurrix,

vielen Dank für den Code-Schnipsel.

Ich habe das mal in meinem Modul eingebaut aber wie kann ich jetzt abfragen "Wenn vorhanden dann ... "

Ich habe es mit ...

Code: Alles auswählen

if ($articleColl == '') {echo 'tada';} else { echo 'huhu';};
versucht, aber leider gibt er ob Online-Nicht-Startikel vorhanden oder nicht beides mal "huhu" aus.

Vielen Dank

MfG Steffen

dominik.ziegler
Beiträge: 437
Registriert: Do 19. Jun 2008, 09:09

Re: Überprüfe ob ein Online-Nicht-Startartikel in Idcat ist

Beitrag von dominik.ziegler » Mi 16. Okt 2013, 20:33

$articleColl ist in diesem Fall die Collection der Artikel, die du abgefragt hast. In $article bekommst du ein Objekt des Artikels der gefunden wurde. Wenn also $article gesetzt ist, solltest du einen entsprechenden Artikel gefunden haben.
Viele Grüße
Dominik

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Überprüfe ob ein Online-Nicht-Startartikel in Idcat ist

Beitrag von xmurrix » Mi 16. Okt 2013, 20:47

derSteffen hat geschrieben:...Ich habe das mal in meinem Modul eingebaut aber wie kann ich jetzt abfragen "Wenn vorhanden dann ...
Das ist am Ende (die letzten 3 Zeilen) des Beispiel-Codes angegeben, für dein Code würde das so aussehen:

Code: Alles auswählen

...
$article = $articleColl->nextArticle();
if ($article) {
    $myidart = $article->get('idart');
    echo "tada, artikelid ist {$myidart}";
} else {
    echo "huhu, nichts gefunden";
}
Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Überprüfe ob ein Online-Nicht-Startartikel in Idcat ist

Beitrag von derSteffen » Do 17. Okt 2013, 09:19

Hallo Dominik, hallo xmurrix,

vielen Dank. Der Code von xmurrix erfüllt meine Wünsche :-)

Vielen Dank nochmal dafür!

MfG Steffen

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Überprüfe ob ein Online-Nicht-Startartikel in Idcat ist

Beitrag von derSteffen » Do 21. Nov 2013, 09:59

Hallo .. ich muss noch mal was fragen!

Code: Alles auswählen

cInclude('classes', 'class.article.php');
		$articleCollCA = new ArticleCollection(array(
			'idcat' => $idcat,
			'lang' => $lang,
			'client' => $client,
			'start' => true,
			'offline' => true,
			'limit' => 1	
		));
		$articleca = $articleCollCA->nextArticle();
		if ($articleca) {echo "JA";} else { echo "NEIN";}
Das bedeutet doch, dass er überprüft ob in der Kategorie in der er sich befindet mind. ein Artikel vorhanden ist, der sich in dieser Kategorie, dieser Sprache, diesen Mandanten befindet, wo ein Start-Artikel existiert und ein Artikel offline ist .. oder habe ich was falsch verstanden?!
Komischerweise kommt als Ausgabe immer JA, obwohl sich in dieseer Kategorie kein Offline-Artikel befindet!

Ich gebe jetzt keine idcat an, denn er soll ja das auf die Kategorie anwenden, wo er sich gerade befindet!

Ich versuche nämlich krampfhaft im nächsten Schritt zu sagen ... wenn Contentallocatioen (also idpica_alloc) => 1 ist!

Das mein Code in etwa so aussieht:

Code: Alles auswählen

cInclude('classes', 'class.article.php');
		$articleCollCA = new ArticleCollection(array(
			'idcat' => $idcat,
			'lang' => $lang,
			'client' => $client,
			'start' => true,
			'offline' => true,
			'limit' => 1,
			 'idpica_alloc' => '1'		
		));
		$articleca = $articleCollCA->nextArticle();
		if ($articleca) {echo "JA";} else { echo "NEIN";}
Ich habe allerdings bedenken, dass das nicht so einfach sein wird, da ja die Klasse class.article.php gar nicht die Tabelle con_pica_alloc abfagt.

Vielen Dank

MfG Steffen

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Überprüfe ob ein Online-Nicht-Startartikel in Idcat ist

Beitrag von xmurrix » Do 21. Nov 2013, 11:38

Hallo derSteffen,

wenn du die Option 'offline' auf true setzt, wird ein Artikel zurückgeliefert, der online oder offline ist.

Das mag jetzt verwirrend sein, aber so ist der Code nun mal in der Klasse ArticleCollection.
- Option offline = true: Online oder offline Artikel
- Option offline = false: Nur online Artikel
- Keine Option offline: Online oder offline Artikel

Die Option 'idpica_alloc' wird nicht von ArticleCollection unterstützt, hier der angepasste Auszug aus der Sourcecode Doku:

Code: Alles auswählen

    /**
     * Article Collection Constructor
     *
     * @param array Options array with schema array("option"=>"value");
     *    idcat (required) - Contenido Category Id
     *    lang - Language Id, active language if ommited
     *    client - Client Id, active client if ommited
     *    artspecs  - Array of article specifications, which should be considered
     *    start - include start article in the collection, defaults to false
     *    order - articles will be orderered by this property, defaults to 'created'
     *    direction - Order direcion, 'asc' or 'desc' for ascending/descending
     *    limit - Limit numbers of articles in collection
     *    offline - Optional, false to get only online article
     *
     * @return void
     */
Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Überprüfe ob ein Online-Nicht-Startartikel in Idcat ist

Beitrag von derSteffen » Do 21. Nov 2013, 14:14

Hallo xmurixx.

vielen Dank!

Komisch, in meiner Kategorie gibt es 5 Artikel, davon sind alle online und keiner offline und es gibt einen Startartikel der online ist! Trotzdem wird JA ausgegeben?

Code: Alles auswählen

cInclude('classes', 'class.article.php');
		$articleCollCA = new ArticleCollection(array(
			'idcat' => 166,
			'lang' => $lang,
			'client' => $client,
			'offline' => true		
		));
		$articleca = $articleCollCA->nextArticle();
		if ($articleca) {echo "JA";} else { echo "NEIN";}
Ich dachte, es müssen alle Kriterien erfüllt sein und dann soll er JA ausgeben und ansonsten NEIN. In meinem Fall müßte NEIN stehen, eskommt aber JA.

Also ich will das nur gerne verstehen, da ich wie gesagt im nächsten Schritt, irgendwie die ContentAllocation-Abfrage mit rein bekommen möchte. Wobei ich hier auch noch gar nicht weiß, ob es dafür überhaupt eine Klasse gibt.

Vielen Dank

MfG Steffen

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Überprüfe ob ein Online-Nicht-Startartikel in Idcat ist

Beitrag von xmurrix » Do 21. Nov 2013, 14:35

Hallo derSteffen,

wie ich vorhin angemerkt habe, sorgt das Setzen der Option offline = true dafür, dass der offline Status der Artikel nicht berücksichtigt wird, dieser Filter wird also nicht angewendet.

Normalerweise würde man erwarten, dass offline = true nur die offline Artikel liefert, da offline = false ja die online Artikel liefert. Dem ist aber nicht so.

Man kann also sagen, dass das Fehlerhaft oder auch irreführend ist und korrigiert werden sollte. Das ist aber auch nicht einfach, das dieser Code in der ArticleCollection wohl sehr lange existiert. Wenn man das nun "korrigiert" ist die Gefahr groß, dass einige CONTENIDO Installationen beim nächsten Update sich anders verhalten.

Der von dir gepostete Code

Code: Alles auswählen

...
      $articleCollCA = new ArticleCollection(array(
         'idcat' => 166,
         'lang' => $lang,
         'client' => $client,
         'offline' => true      
      ));
...
macht am Ende folgende Datenbankabfrage:

Code: Alles auswählen

Hole mit alle Artikel aus der Kategorie 166, die auch der Sprache $lang und dem Mandanten $client zugeordnet sind.
Die Option offline = true, wird dabei einfach ignoriert!

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Überprüfe ob ein Online-Nicht-Startartikel in Idcat ist

Beitrag von derSteffen » Do 21. Nov 2013, 15:44

Ah .. okay! Jetzt hat es Klick gemacht!

Gut zu wissen, vielen Dank.

Ich wollte auch nur versuchen es zu verstehen :? .. ich brauche das ja so jetzt nicht in dieser Art. Ich hatte halt nur gehofft daran anzuküpfen, da ich in meiner eigentlichen Abfragen fragen wollte: "existiert in gerade dieser Kategorie ein Artikel der die Content Allocation 1 hat, also genauer gesagt die idpica_alloc = 1 hat.

Aber das werde ich ja nicht mit dem $articleCollCA = new ArticleCollection(array abfragen können, sondern wahrscheinlich ja eher mit ner SQL-Abfrage, oder?!

Vielen Dank

MfG Steffen

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Überprüfe ob ein Online-Nicht-Startartikel in Idcat ist

Beitrag von xmurrix » Do 21. Nov 2013, 15:59

...Aber das werde ich ja nicht mit dem $articleCollCA = new ArticleCollection(array abfragen können, sondern wahrscheinlich ja eher mit ner SQL-Abfrage, oder?!...
Du hast 2 Möglichkeiten:
  • Entweder holst du die Artiklel aus der Kategorie mit ArticleCollection, sammelst gefundene idartlang, und machst eine 2. Abfrage auf die Tabelle con_pica_alloc_con
  • oder du baust deine SQL-Anweisung so zusammen, dass es übr alle nötigen Tabellen geht, um die gewünschten Ergebnisse zu sammeln. Schau dir die SQL Anweisung in ArticleCollection._getArticlesByCatId (contenido/classes/class.article.php) an, die kannst du als Vorlage nehmen und erweitern.
Das erstere ist sehr wahrscheinlich einfacher und das zweitere eventuell performanter...

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: Überprüfe ob ein Online-Nicht-Startartikel in Idcat ist

Beitrag von derSteffen » Mo 25. Nov 2013, 08:14

Danke xmurrix,

das werde ich mal versuchen hinzubekommen und dann gibtes hier antwort :-)

MfG Steffen

Gesperrt