[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • Erste Slice eines ctypes eines anderen Artikel auslesen
Seite 1 von 1

Erste Slice eines ctypes eines anderen Artikel auslesen

Verfasst: 24. Okt 2006, 03:27
von atomic
Hallo zusammen,

ist das moeglich ?
komme irgendwie nicht auf eine gescheite Loesung.

Ich habe

0 -> Hauptbereich
1 -> Links
2 -> Rechts

Ich lese in einem Modul alle Artikel einer Kategorie aus und haette gerne den 1. Slice des linken Contents :-)

Ich will also nicht den ganzen ctype Bereich des Artikels ausgeben, das ist klar wie es geht, ich will lediglich nur den Wert des ersten Slice haben.

Any ideas ?

Danke und Gruss,
Andreas

Verfasst: 24. Okt 2006, 04:30
von zehbaeh
Auf diesen Weg bin ich nach dem lesen deiner Frage gekommen.

Code: Alles auswählen

$catID = ***ID DER CATEGROIE DES LINKEN BEREICHS***;
$artID = OOArticle::getCategoryStartArticle($catID)->getID();
$sliceID = OOArticleSlice::getFirstSliceForArticle($artID)->getID();
$art = new article();
$art->getSlice = $sliceID;
$art->setArticleID($artID);
echo $art->getArticle();
PS: Ist das setzen von getSlice irgendwo dokumentiert? Wenn nicht, sollte es IHMO irgendwie einen anderen Weg geben.

Verfasst: 24. Okt 2006, 05:58
von Dr KillerJoe
Willst Du den cTypes jeweiligen Artikel auslesen, oder den eines anderen Artikel?

Im Grunde kannst du auch das Modul Artikel einbinden verwenden, Du mußt nur

Code: Alles auswählen

   $article = new article(REX_LINK_ID[1]);
   echo $article->getArticle();

in

Code: Alles auswählen

   $article = new article(REX_LINK_ID[1]);
   $article->setCType(1);     //für linken bereich
   $article->getFirstSlice();
   echo $article->getArticle();

bzw

Code: Alles auswählen

   $article = new article(REX_LINK_ID[1]);
   $article->setCType(2);     //für rechten bereich
   $article->getFirstSlice();
   echo $article->getArticle();

abändern... (ungetestet!)
Du müßtest halt nur für jeden Ctype ein eigenes Modul erstellen, oder das Modul so umbaue, daß es in einem funktioniert.

mfg
Flo

PS: Das CheatSheet von Thomas ist schon was feines ;)

Verfasst: 24. Okt 2006, 11:01
von Markus.Staab
Hi zusammen,
Dr KillerJoe hat geschrieben:PS: Das CheatSheet von Thomas ist schon was feines ;)
Zur vervollständigung..

Hier gehts zum CheatSheet download:
http://www.redaxo.de/220-0-download.html

Gruß,
Markus

Verfasst: 24. Okt 2006, 11:06
von Dr KillerJoe
Danke Markus!! War letzte nacht zu faul es auf den Link zu suchen :oops:

PS: Mich würd mal interressieren, ob das so funktioniert wie es soll...

Verfasst: 24. Okt 2006, 12:02
von atomic
Im CeatSheet ist z.B. das setCType garnicht vermerkt :-)


$article = new article($referenceArticle->_id);
$article->setCType(1); //für rechten bereich
$article->getFirstSlice();
echo $article->getArticle();

führt aber zu:
Fatal error: Call to undefined method article::getFirstSlice()

Setze Redaxo 3_2 ein.

Verfasst: 24. Okt 2006, 12:20
von atomic
Habe grade mal im Quellcode geschaut,
getFirstSlice() scheint es nicht (mehr) zu geben.

Verfasst: 24. Okt 2006, 13:03
von atomic
Ich hab mir die Slice Funktionen nochmal angeschaut und leider keine bessere Alternative gefunden als mir selber was zu bauen ;-)

Hier mein Loesungsweg:

Code: Alles auswählen

$slice = OOArticleSlice::getFirstSliceForArticleWithCType($referenceArticle->_id, 1);
$val = $slice->getValue("1");      	 
echo $val;
Wie man sieht habe ich eine neue Funktion in class.ooarticleslice.inc.php eingebaut aehnlich der getFirstSliceForArticle:

Code: Alles auswählen

   /*
   * CLASS Function:
   * Return the first slice for an article with special CType.
   * This can then be used to iterate over all the
   * slices in the order as they appear using the
   * getNextSlice() function.
   * Returns an OOArticleSlice object
   */
  function getFirstSliceForArticleWithCType($an_article_id, $an_article_ctype=NULL) {
  	global $REX;
  	$table = '';
  	$table = $REX['TABLE_PREFIX']."article_slice";
    $sql = new sql;
    // nanko
    if($an_article_ctype != NULL) {
	$ctype_query = ' AND ctype = '.$an_article_ctype;
    }

    $query = <<<EOD
SELECT
  id,re_article_slice_id,value1,value2,value3,value4,value5,value6,
  value7,value8,value9,value10,file1,file2,file3,file4,file5,file6,
  file7,file8,file9,file10,link1,link2,link3,link4,link5,link6,link7,
  link8,link9,link10,php,html,article_id,modultyp_id
FROM $table
WHERE article_id = $an_article_id $ctype_query GROUP BY article_id ORDER BY re_article_slice_id
EOD;
    $sql->setQuery($query);
    if ($sql->getRows() == 1) {
      return new OOArticleSlice(
              $sql->getValue("id"),$sql->getValue("re_article_slice_id"),$sql->getValue("value1"),
              $sql->getValue("value2"),$sql->getValue("value3"),$sql->getValue("value4"),
              $sql->getValue("value5"),$sql->getValue("value6"),$sql->getValue("value7"),
              $sql->getValue("value8"),$sql->getValue("value9"),$sql->getValue("value10"),
              $sql->getValue("file1"),$sql->getValue("file2"),$sql->getValue("file3"),
              $sql->getValue("file4"),$sql->getValue("file5"),$sql->getValue("file6"),
              $sql->getValue("file7"),$sql->getValue("file8"),$sql->getValue("file9"),
              $sql->getValue("file10"),$sql->getValue("link1"),$sql->getValue("link2"),
              $sql->getValue("link3"),$sql->getValue("link4"),$sql->getValue("link5"),
              $sql->getValue("link6"),$sql->getValue("link7"),$sql->getValue("link8"),
              $sql->getValue("link9"),$sql->getValue("link10"),$sql->getValue("php"),
              $sql->getValue("html"),$sql->getValue("article_id"),$sql->getValue("modultyp_id")
            );
    }
    return null;
  }
Wenn jemand noch einen Redaxo konformen Weg weiss, bin ich natuerlich dafuer offen, falls es nicht geht, kann bei gefallen ja auch obige Funktion verwendet werden.

Gruss,
Andreas

Verfasst: 24. Okt 2006, 14:26
von Markus.Staab
Hi Andreas,

mir ist hier leider auch kein anderer Weg bekannt, allerdings weiss ich, dass deine Methode so wie sie hier steht, nicht immer zum Ziel führt.

Wenn du mehrere Slices einfügst und anschließend, den 1. Slice in dem jeweiligen Ctype nach unten verschiebst, wird dieser Query dir das falsche ergebnis liefern..

Dieses Problem ist aufgrund der DB Struktur so einfach nicht lösbar.. Sonst hätten wir da schon was im Kern drinne :O

Gruß,
Markus

Verfasst: 24. Okt 2006, 14:29
von atomic
Hi Markus,

danke fuer den Hinweis,
in meinem Fall wird es immer zum richtigen Ergebniss fuehren :-)

Aber du hast natürlich recht, das es nicht immer der 1. Slice ist wenn es mehrere sind.

Aber fuer meine Zwecke reicht das erstmal so, sofern mir noch was besseres einfaellt werde ich es mitteilen.

Gruss,
Andreas

Re: Erste Slice eines ctypes eines anderen Artikel auslesen

Verfasst: 28. Jan 2015, 11:39
von MAZup!
Für alle, die diesen Artikel über die Suchmaschine finden und vor selbigem Problem stehen:

Seit Rex 4.2 ist es möglich, bestimmte cTypes bestimmter Artikel auch so einzubinden:

REX_ARTICLE[id=1 ctype=2]

Hier mehr dazu:

http://www.redaxo.org/de/doku/version-4 ... einbinden/

Gruß Matthias