Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: http://redaxo.org/slack/
atomic
Beiträge: 60
Registriert: 18. Mai 2006, 20:05
Wohnort: Freiburg
Kontaktdaten: Website

Erste Slice eines ctypes eines anderen Artikel auslesen

24. Okt 2006, 03:27

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

zehbaeh
Beiträge: 556
Registriert: 17. Okt 2006, 11:52
Wohnort: Solingen

24. Okt 2006, 04:30

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.

Dr KillerJoe
Beiträge: 1711
Registriert: 24. Nov 2005, 22:29
Kontaktdaten: ICQ Website Yahoo Messenger AOL

24. Okt 2006, 05:58

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 ;)
Die Doku und Wiki sind Deine Freunde!!!

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

24. Okt 2006, 11:01

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

Dr KillerJoe
Beiträge: 1711
Registriert: 24. Nov 2005, 22:29
Kontaktdaten: ICQ Website Yahoo Messenger AOL

24. Okt 2006, 11:06

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...
Die Doku und Wiki sind Deine Freunde!!!

atomic
Beiträge: 60
Registriert: 18. Mai 2006, 20:05
Wohnort: Freiburg
Kontaktdaten: Website

24. Okt 2006, 12:02

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.

atomic
Beiträge: 60
Registriert: 18. Mai 2006, 20:05
Wohnort: Freiburg
Kontaktdaten: Website

24. Okt 2006, 12:20

Habe grade mal im Quellcode geschaut,
getFirstSlice() scheint es nicht (mehr) zu geben.

atomic
Beiträge: 60
Registriert: 18. Mai 2006, 20:05
Wohnort: Freiburg
Kontaktdaten: Website

24. Okt 2006, 13:03

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

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

24. Okt 2006, 14:26

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

atomic
Beiträge: 60
Registriert: 18. Mai 2006, 20:05
Wohnort: Freiburg
Kontaktdaten: Website

24. Okt 2006, 14:29

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

MAZup!
Beiträge: 67
Registriert: 14. Okt 2010, 15:53

Re: Erste Slice eines ctypes eines anderen Artikel auslesen

28. Jan 2015, 11:39

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

Zurück zu „Allgemeines [R3]“