So langsam werde ich warm mit Redaxo und bin immer noch sehr angetan.
Allerdings bin ich vor ein paar Tagen auf ein Problem gestoßen, wobei es
entweder sein kann, dass ich den korrekten Ablauf nicht richtig blicke, oder
es sich tatsächlich um einen Fehler im System handelt.
Here we go:
Ich möchte eine Artikelliste aus bestehenden Artikeln einer Kategorie
ausgeben. Die Artikel bestehen momentan jeweils noch aus einem einfachen
Modul.
Hier mal ein wenig Dummycode:
- Code: Alles auswählen
$cat = OOCategory::getCategoryById(7);
$articles = $cat->getArticles( true);
if (is_array($articles))
{
foreach ($articles as $article)
{
$slice = OOArticleSlice::getFirstSliceForArticle($article->getId());
echo "<pre>";
print_r($slice);
echo "</pre>";
}
}
So weit, so gut. Das Problem an der Geschichte allerdings ist, dass die
Methode getFirstSliceForArticle() nicht korrekt arbeitet, sobald ich mit
mehreren Sprachen unterwegs bin.
Die SQL Abfrage schnappt sich nämlich die Slices, die einer bestimmten
Artikel ID zugeordnet sind. Wenn jetzt aber mehrere Sprachen vorliegen,
unterscheiden sich die jeweiligen Artikel in diesen Sprachen nicht mehr
in ihrer ID (lediglich PID), was zur Folge hat, dass folgende IF Abfrage
in der Funktion getFirstSliceForArticle() größer als 1 ist:
- Code: Alles auswählen
if ($sql->getRows() == 1) {}
Als Workaround habe ich mir die Methode getFirstSliceForArticle() wie
folgt editiert:
- Code: Alles auswählen
function getFirstSliceForArticle($an_article_id) {
$sql = new sql;
global $REX;
$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 rex_article_slice
WHERE article_id = $an_article_id AND re_article_slice_id = 0 AND clang = {$REX['CUR_CLANG']}
EOD;
USW...
Da ist jetzt quasi nur eine Erweiterung der SQL Abfrage hinzugekommen,
die auch auf die aktuelle Sprache prüft.
Falls jemand eine elegantere Lösung hat, her damit.

