Super, das funktioniert!
Vielen Dank für Eure schnelle und kompetente Hilfe.
Hätte ich sonst nie hinbekommen!
Nun erzeuge ich also mit der Eingabe z.B. des Codes
{get_catItems cat_id=4,22}
in ein Inhaltsfeld (Editor) eine Link-Liste aller Artikel aus den Kategorien 4 sowie 22 (es geht natürlich auch nur eine).
[ Für Gäste sind keine Dateianhänge sichtbar ]
Zusätzlich wird noch eine Produktbild-Miniatur dargestellt, sowie die Artikel.Nr. (ich hab stattdessen nen Subtitel genommen). Für die Art.Nr. sollte noch der Text davor gesetzt werden, ich wusste aber nicht, wie ich den per PHP aufrufen kann.
Die Funktion get_catItems($contentText) kann nun in eine externe Datei gelegt werden, welche dann per require_once in der ensprechenden Datei zur Erzeugung des Inhaltes geladen wird (in diesem Fall includes/modules/product_info.php).
Hier muss die Funktion nur noch direkt vor der Übergabe auf den Inhalt angewendet werden:
Also z.B. vor:
$smarty->assign('main_content', $product_info);
Kommt nun noch:
$product_info = get_catItems($product_info); // mcm - suche nach '{get_catItems cat_id=xyz}'
Und hier die aktualisierte Funktion:
/* ### BOF mcm - function get_catItems() ### */ /* ### filtert aus Content den folgenden Code: {get_catItems cat_id=4,22} ### */ /* ### und ersetzt ihn mit Produkt-Linklisten der uebergebenen Kategorien ### */ function get_catItems
($contentText) { $reg_muster = '/(\{get_catItems cat_id=)(?P<catId>.*)(\})/'; if (preg_match ($reg_muster, $contentText, $treffer)) { $catId = htmlspecialchars($treffer['catId']); $db_query = xtc_db_query
("select
ptc.products_id, pd.products_name, p.products_image, p.products_model
from
".TABLE_PRODUCTS_TO_CATEGORIES
." ptc,
".TABLE_PRODUCTS_DESCRIPTION
." pd,
".TABLE_PRODUCTS
." p
where
ptc.products_id = pd.products_id
AND pd.products_id = p.products_id
AND categories_id IN ($catId)
AND pd.language_id = '".(int
) $_SESSION['languages_id']."'"); if (xtc_db_num_rows
($db_query)) { $linklist = ''; while($data=xtc_db_fetch_array
($db_query,true)) { $pid = $data['products_id']; $g = xtc_product_link
($pid); $prodName = $data['products_name']; $prodName = preg_replace('/\|/',' ',$prodName); // mcm - intern: Titel-Trenner entfernen $prodLink = xtc_href_link
(FILENAME_PRODUCT_INFO
, $g); $prodModel = $data['products_model']; $image = xtc_image
(DIR_WS_THUMBNAIL_IMAGES
.$data['products_image'], $prodName,'40','','style="float: left; margin: 0 0 5px -55px; padding: 0;"'); $linklist .= '<a href="'.$prodLink.'" style="display: block; height: 40px; line-height:20px; clear: both;
padding-left: 55px;">'.$image.$prodName.'<br />'.$prodModel.'</a>'; //$linklist .= '<a href='.$prodLink.'>'.$prodName.'</a><br />'; } if ($linklist != '') { $linklist = '<span class="catLinkList">'.$linklist.'</span>'; return preg_replace($reg_muster,$linklist,$contentText); } else return preg_replace($reg_muster,'',$contentText); } else return preg_replace($reg_muster,'',$contentText); } else return $contentText; } /* ### EOF mcm - function get_catItems() ### */$product_info = get_catItems
($product_info); // mcm - suche nach '{get_catItems cat_id=xyz}' $smarty->assign('main_content', $product_info);?> Wahrscheinlich werden momentan auch versteckte Produkte angezeigt, das sollte dann noch ausgeschlossen werden.
Außerdem weiß ich nicht, ob die SessionID übergeben wird, wenn Cookies aus sind???
Kann auch sein, dass das Skript die Seite etwas ausbremst, ich lege die Funktion aber nur auf Content-Seiten, da ist das nicht so schlimm.
Fällt Euch sonst noch was auf?