== UDT hierarchy_position ==]
/**
* Returns page_alias of valid [hierarchy] position
*
* @param string $params['page_position'] Mandatory.
* @param string $params['assign']
*/
$return = FALSE;
$c_alias = cms_utils::get_current_alias();
$db = \CmsApp::get_instance()->GetDb();
$query = 'SELECT hierarchy FROM ' . cms_db_prefix() . 'content WHERE content_alias = ?';
$page_hierarchy = $db->GetOne($query, array($c_alias));
if (!empty($params[page_position])) {
$lang_hierarchy = $params[page_position];
$lang_hierarchy .= substr($page_hierarchy, 5);
$db = \CmsApp::get_instance()->GetDb();
$query = 'SELECT content_alias FROM ' . cms_db_prefix() . 'content WHERE hierarchy = ?';
$return = $db->GetOne($query, array($lang_hierarchy));
}
if (isset($params['assign'])) {$smarty->assignGlobal($params['assign'], $return);}
else {return $return;} Der Trick - man legt die verschiedenen Sprachinhalte einfache eine Haupthierarchie höher und pflegt sie 1:1 ein. Beispiel Wenn 00001..... deutsch ist wäre 00002..... z.B. englisch und das natürlich auch in den Unterseiten. Wenn also jemand deutsch hat und will englisch muss man den ersten Teil der Hierarchie nur um +1 erhöhen. Man muss also zunächst einmal den aktuellen content_alias erhalten, das macht man hier mit get_current_alias - vollkommen überflüssig, da der alias bereits unter Smarty gespeichert ist (page_alias) und somit direkt abrufbar wäre. Dann holt man sich die hierarchy über den (eindeutigen ?) content_alias und fummelt den ersten Teil um und macht eine erneute Abfrage. Besser wäre es dafür die content_id einzusetzen die ebenfalls bereits unter Smarty vorliegt. Alles ein wenig umständlich. Das kann man alles in einem Abwasch erledigen:
Sql= select content_alias from cms_content where hierarchy=(SELECT REPLACE(cms_content.hierarchy,LEFT(hierarchy,5),LPAD((ABS(LEFT(hierarchy,5))+1),5,'0')) AS new FROM `cms_content` WHERE content_alias='cms_tags'LIMIT 1 )
Ich habe hier mal zum Test als alias cms_tags vorgegeben. Die Seite in der Cmsms Demoversion hat die Hierarchy 00003.00001. Als Ergebnis wird der content_alias modules geliefert, diese Seite hat die Hierarchy 00004.00001 - das ist also die Starthierarchy plus 1 und es zeigt das es so funktioniert. Man muss bei mehr als zwei Sprachen das +1 als Parameter ausführen. Unterm Strich zeigt es , das die Bastler alles auf die einfachste Art zurück führen und damit viel zu kompliziert arbeiten- Man kann aber auch alles zentral steuern wenn man ein paar Zeilen in die index.php einsetzt.
Keine Kommentare:
Kommentar veröffentlichen