Montag, 18. Januar 2016

Wie man bei Cmsms V 2 eine einfache Mehrsprachlichkeit erzeugt

Wenn schon gebastel dann aber vom Ansatz her doch mal richtig und ausbaufähig.

Das bedeutet

wir ändern die aktuelle Version 2 ein wenig und zwar nur in der index.php.

$page = get_pageid_or_alias_from_url();
include "mylanguages.php";


Nach $page .....  wird nur das include hinzugefügt.

Das Script mylanguages.php liegt in der Root und sieht so aus:




$default_lang = 'de';
if (empty($_SESSION['mylang'])){
   $_SESSION['mylang']  = $default_lang;
}
if (!empty($params['lang']) && $params['lang'] <> $_SESSION['mylang']) {
$_SESSION['mylang']  = $params['lang'];

$faktor = 0;
$alias = '';
if ($params['lang'] == 'en') {
$faktor = 1;
} elseif ($params['lang'] == 'fr') {
$faktor = 2;
}
## usw . und so fort.
if ($faktor <> 0) {
$db = $_app->GetDb();
if (is_numeric($page))
{
$alias = $db->GetOne('SElECT content_alias FROM ' . cms_db_prefix() . 'content WHERE hierarchy=(SELECT REPLACE(cms_content.hierarchy,LEFT(hierarchy,5),LPAD((ABS(LEFT(hierarchy,5))+?),5,"0")) AS new FROM ' . cms_db_prefix() . 'content WHERE content_id=? )', array($faktor,$page));
 }
else
{
 $alias = $db->GetOne('SElECT content_alias FROM ' . cms_db_prefix() . 'content WHERE hierarchy=(SELECT REPLACE(cms_content.hierarchy,LEFT(hierarchy,5),LPAD((ABS(LEFT(hierarchy,5))+?),5,"0")) AS new FROM ' . cms_db_prefix() . 'content WHERE content_alias=? )', array($faktor,$page));
 }
}
 if (!empty($alias)) {
$page = $alias;
/*
* Hier können noch weitere Dinge an Smarty zugewiesen werden.
Die Variable $smarty liegt bereits vor
* also nur noch
$smarty->assignGlobal('Name',$wert);
*/
 }
}

und das war es auch schon.

Die Funktionsweise ist einfach.

Ist der in der Url übergebene Parameter lang gleich en dann wird zur ersten Hierarchie eine 1 addiert und der dafür gegebene content_alias bzw. nach Bedarf die content_id geholt und an $page zugewiesen.

Das bedeutet es wird eine Seite geholt deren Hierarchie nicht mit 00001. anfängt sondern  mit 00002. , die Subhierarchien bleiben die gleichen.
Wer will oder muss kann nach der Zuweisung zu $page auch noch andere Werte an Smarty übergeben die vielleicht für die Sprachsteuerung im Template benötigt werden könnten.

Da es aber ganz normale Inhalte sind kann man der jeweiligen Sprachgruppe auch ein entsprechend angepasstes Template verpassen.

Die ganze Sache ist einfach und ausbaufähig.

Gewurstel um einfache Mehrsprachlichkeit

Cmsms Anwender sind geschickt wenn es darum geht erkleckliche Mängel zu umgehen, denn wie in der Ex DDR sind sie Mängel gewöhnt. So z.B. das Thema Mehrsprachlichkeit, das mit einem Zusatzfeld in allen nötigen Tabellen und der Anpassung der Scripte erledigt gewesen wäre, wenn man denn als Developer gewollt hätte. PowerCMS hat das ja mal vorgemacht wie es geht. Um wenigstens eine Lösung für einfache Webs zu erhalten fummelte man sich ein Userplugin hin das eine Ummünzung von Sprache zu Sprache vornehmen soll.

  == 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.

Mittwoch, 13. Januar 2016

Ein einfacher CMSMS Trick um an protected Information heranzukommen

Man schreibe ein kleines Plugin:


<?php

function smarty_function_get_co_template_alias($params, $template)
{
 
    ob_start();  
    print_r($template->tpl_vars['content_obj']);
    $html=ob_get_clean();
    $finda='[mAlias:protected] =>';
    $findb='[';
    $wert='';
    $hlen=strlen($html);
    $xl=strlen($finda);
    $p1=@stripos($html,$finda);
    if ($p1 !==false && $hlen >= $p1+$xl) {
        $p2=stripos($html,$findb,$p1+$xl);
        if ($p2 !==false ) {
            $wert=substr($html, $p1+$xl,$p2-$xl-$p1);
        }

    }
   $template->assign('malias',$wert);
/*
     *  [mHierarchy:protected] => 00001
            [mIdHierarchy:protected] => 1
            [mHierarchyPath:protected] => home
            [mMenuText:protected] => Home
            [mActive:protected] => 1
            [mAlias:protected] => home
            [mOldAlias:protected] => home
            [mCachable:protected] => 1



Als aktiven Code einsetzen um zu sehen was da enthalten ist.
print_r($template->tpl_vars['content_obj']);
 

*/
 
}


Man setze das dann in eine Seite ein:

{get_co_template_alias}{$malias}


Und man erhält den Wert mAlias der eigentlich geschützt ist und nur mit der entsprechenden Klassenmethode aufrufbar gewesen wäre.

Man kann das Plugin natürlich aufbohren in dem man mittels Parameter den Suchwert und den Zuweisungsnamen bestimmt.


Smarty Rekursion ohne Ende

Wer über das Haupttemplate einer Seite die Ausgabe von var_export auf die Smarty-Inhalte erzwingt fällt aus allen Wolken - 90 mal kommt die Meldung das var_export keine Ausgabe von rekursiven Bestandteilen ermöglicht.

Betroffen ist ausschließlich Smarty.

Aber - es liegt nicht an Smarty sondern an dem absolut misslungenem Einsatz im Cmsmadesimple - System.

Der ist - was Smarty betrifft absoluter Schrott.

Und genau dieser Einsatz ist es der das System für große Webs völlig unbrauchbar macht und selbst bei kleineren Webs eine ziemlich lahme Ente werden lässt.

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Warning: var_export does not handle circular references in /var/www/html/cmsms/lib/smarty/plugins/function.get_co_template_alias.php on line 5

Freitag, 8. Januar 2016

Manche Tipps sind nicht gut

Das ist so ein Tipp  einer Cmsms - Anwenderin für  einen anderen, der sich nicht traut seine Cmsmadesimpleversion upzudaten.


Gut gemeint aber nicht gerade wirklich sinnig.

Die meisten Webserver sind auf Linux aufgebaut, die meisten Desktop-PC's auf Basis Windows.

Es gibt aber zwischen den Systemen teils heftige Differenzen z.B. im Dateisystem, was dazu führen kann das eine lokale Installation unter Windows auf einem Linuxserver nicht funktionieren wird.

Es macht also keinen großartigen Sinn eine lokale Installation auf einen echten Webserver mit einem anderen Betriebssystem zu übertragen.

Ein solcher Hinweis an andere Cmsms - User von einem angeblichen Cmsms - Profi (so die Titulierung im DE Forum wegen zahlreicher Beiträge) weist zudem die Hinweisgeberin nicht gerade als Profi aus.