Sprachen Inaktiv schalten

  • Hallo zusammen

    Ich frage mich, ob es eine Möglichkeit gibt, einzelne Sprachen "inaktiv" zu schalten. zb. Dass sie im Frontent nicht sichtbar werden nur im backend.. z.b. wenn einzelne Produkte noch nicht übersetzt wurden.

    grüsse

    gnadirap

  • Nein, nicht wirklich.
    Das Problem habe ich aber schonmal gehabt und mir gedacht, in der v2 kann man das dann einfach die entsprechende Sprache ein, bzw. ausschalten.

    Aber derzeit gibt es keine Alternative.

  • Wenn ich mir den Source so anschaue, benötigt es eigentlich nur 4 erweiterungen..

    1. in der datenbank, ein zusätzliches Feld "active, tinyint(1)"
    2. im Adminbereich->Sprachen->Bearbeiten ein Radiobutton, active / not active
    3. in der Funktion, welche die Session generiert, abfrage im SQL-Query -> "and active = '1' " anfügen.
    4. in der Function, welche die Box "box_language" mit Daten versorgt, ebenfalls im SQL-Query einfügen -> "and active ='1' ".

    Falls jemand mir sagen kann, wo ich Punkt 3 und 4 finde, biete ich den Source hier zum download an, sobald dieser von den Admins akzeptiert wurde.


    Grüsse

    Gnadirap

  • Hier mein Vorgehen zum Hinzufügen (PART 1 )

    1. Datenbank
    Über PHPMyAdmin, in der Tabelle "language" das Feld "active" hinzufügen
    name: active
    type: tinyint
    length: 1
    standard: 1 (oder 0, je nach Wunsch)

    2. Languagefile anpassen (Deutsch)
    Datei: /lang/german/admin/language.php
    Hinzufügen:
    [INDENT]
    define('TEXT_INFO_ACTIVE','aktiv');
    define('TEXT_INFO_INACTIVE','inaktiv');
    [/INDENT]

    3. Adminbereich anpassen
    Datei: /admin/language.php

    Query erweitern (Zeile 217) (Active Hinzufügen)
    [INDENT] $languages_query_raw = "select languages_id, name, code, image, directory, sort_order,language_charset,active from " . TABLE_LANGUAGES . " order by sort_order";
    [/INDENT]

    Auswahlmöglichkeit aktiv/inaktiv
    Hinzufügen: (Zeile 280 / 281 ) ( case 'new')
    [INDENT]
    $contents[] = array('text' => '<br />' . TABLE_HEADING_LANGUAGE_NAME.'<br />'.xtc_draw_radio_field('active',1,true) . ' '.TEXT_INFO_ACTIVE. ' <br />'.xtc_draw_radio_field('active',0,false).' '.TEXT_INFO_INACTIVE);[/INDENT]

    Hinzufügen: (Zeile 295 / 296) ( case 'edit')
    [INDENT]if($lInfo->active==1){
    $contents[] = array('text' => '<br />' . TABLE_HEADING_LANGUAGE_NAME.'<br />'.xtc_draw_radio_field('active',1,true) . ' '.TEXT_INFO_ACTIVE. ' <br />'.xtc_draw_radio_field('active','0',false).' '.TEXT_INFO_INACTIVE);
    } else {
    $contents[] = array('text' => '<br />' . TABLE_HEADING_LANGUAGE_NAME.'<br />'.xtc_draw_radio_field('active',1,false) . ' '.TEXT_INFO_ACTIVE. ' <br />'.xtc_draw_radio_field('active','0',true).' '.TEXT_INFO_INACTIVE);
    }[/INDENT]

    Nun gehts ans Speichern
    Hinzufügen Zeile 29 (case 'insert' )
    Erweiterung durch Active im Insert und in den Values
    [INDENT]
    xtc_db_query("insert into " . TABLE_LANGUAGES . " (name, code, image, directory, sort_order,language_charset,active) values ('" . xtc_db_input($name) . "', '" . xtc_db_input($code) . "', '" . xtc_db_input($image) . "', '" . xtc_db_input($directory) . "', '" . xtc_db_input($sort_order) . "', '" . xtc_db_input($charset) . "','".xtc_db_input($active)."')");
    [/INDENT]

    Hinzufügen ab Zeile 118 (case 'save')
    zuerst beim abruf der Variable aus dem $_POST.
    [INDENT]$active = xtc_db_prepare_input($_POST['active']);[/INDENT]

    nun den Update-Query erweitern
    [INDENT]xtc_db_query("update " . TABLE_LANGUAGES . " set name = '" . xtc_db_input($name) . "', code = '" . xtc_db_input($code) . "', image = '" . xtc_db_input($image) . "', directory = '" . xtc_db_input($directory) . "', sort_order = '" . xtc_db_input($sort_order) . "', language_charset = '" . xtc_db_input($charset) . "', active = '" . xtc_db_input($active) . "' where languages_id = '" . xtc_db_input($lID) . "'");[/INDENT]

    Einmal editiert, zuletzt von gnadirap (25. November 2009 um 11:13)

  • Hier mein Vorgehen FRONTEND (PART II )

    4. Session bearbeiten
    Datei: /includes/classes/language.php
    Ändern (Erweitern vom Query)
    [INDENT]$languages_query = xtc_db_query("select languages_id, name, code, image, directory,language_charset from " . TABLE_LANGUAGES . " WHERE active ='1' order by sort_order");[/INDENT]


    Und Fertig...

    Ich warte gerne auf eure Bestätigung.. Bei mir funktionierts jetzt jedenfalls.

    Grüsse

    Gnadirap

  • Erweiterung zu Punkt 3:
    Damit man auf den ersten Blick sieht, ob die Sprache aktiv, oder inaktiv ist, sobald eine Sprache markiert ist (im rechten Tabellenfeld )
    Ca. Zeile 315 (Switch -> default )
    nach Zeile 325 hinzufügen:
    [INDENT]
    if($lInfo->active==1){
    $contents[] = array('text' => '<br />' . TABLE_HEADING_LANGUAGE_NAME.': <b>'.TEXT_INFO_ACTIVE.'</b>');
    } else {
    $contents[] = array('text' => '<br />' . TABLE_HEADING_LANGUAGE_NAME.': <b>'.TEXT_INFO_INACTIVE.'</b>');
    }
    [/INDENT]


    Anzeige in der Haupttabelle, ob eine Sprache Aktiv ist, oder nicht
    Datei: /lang/german/admin/languages.php
    Hinzufügen:
    [INDENT]define('TABLE_HEADING_LANGUAGE_STATUS','Status');[/INDENT]

    Datei: /admin/languages.php
    Erweiterung der Main-Table:
    [INDENT]
    <tr class="dataTableHeadingRow">
    <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_LANGUAGE_NAME; ?></td>
    <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_LANGUAGE_CODE; ?></td>
    <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_LANGUAGE_STATUS; ?></td>
    <td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_ACTION; ?>&nbsp;</td>
    </tr>
    [/INDENT]

    Anschliessend entsprechend erweitern:
    von:
    [INDENT]
    <td class="dataTableContent"><?php echo $languages['code']; ?></td>
    <td class="dataTableContent" align="right"><?php if ( (is_object($lInfo)) && ($languages['languages_id'] == $lInfo->languages_id) ) { echo xtc_image(DIR_WS_IMAGES . 'icon_arrow_right.gif'); } else { echo '<a href="' . xtc_href_link(FILENAME_LANGUAGES, 'page=' . $_GET['page'] . '&lID=' . $languages['languages_id']) . '">' . xtc_image(DIR_WS_IMAGES . 'icon_info.gif', IMAGE_ICON_INFO) . '</a>'; } ?>&nbsp;</td>
    [/INDENT]

    nach:
    [INDENT]
    <td class="dataTableContent"><?php echo $languages['code']; ?></td>
    <?
    if( (is_object($lInfo)) && ($languages['active']==$lInfo->active)){
    echo '<td class="dataTableContent">'.TEXT_INFO_ACTIVE.'</td>';
    } else {
    echo '<td class="dataTableContent">'.TEXT_INFO_INACTIVE.'</td>';
    }
    ?>
    <td class="dataTableContent" align="right"><?php if ( (is_object($lInfo)) && ($languages['languages_id'] == $lInfo->languages_id) ) { echo xtc_image(DIR_WS_IMAGES . 'icon_arrow_right.gif'); } else { echo '<a href="' . xtc_href_link(FILENAME_LANGUAGES, 'page=' . $_GET['page'] . '&lID=' . $languages['languages_id']) . '">' . xtc_image(DIR_WS_IMAGES . 'icon_info.gif', IMAGE_ICON_INFO) . '</a>'; } ?>&nbsp;</td>
    [/INDENT]

    Einmal editiert, zuletzt von gnadirap (25. November 2009 um 11:15)

  • Du hast eine Menge Flüchtigkeitsfehler drin, aber der Ansatz ist gut. So ähnlich habe ich es auch gemacht.

  • Hinzufügen: (Zeile 295 / 296) ( case 'edit')[INDENT]if($lInfo->active==1){
    $contents[] = array('text' => '<br />' . TABLE_HEADING_LANGUAGE_NAME.'<br />'.xtc_draw_radio_field('active',1,true) . ' '.TEXT_INFO_ACTIVE. ' <br />'.xtc_draw_radio_field('active','0',false).' '.TEXT_INFO_INACTIVE);
    } else {
    $contents[] = array('text' => '<br />' . TABLE_HEADING_LANGUAGE_NAME.'<br />'.xtc_draw_radio_field('active',1,false) . ' '.TEXT_INFO_ACTIVE. ' <br />'.xtc_draw_radio_field('active','0',true).' '.TEXT_INFO_INACTIVE);
    }[/INDENT]

    Mache daraus:

    HTML
    $contents[] = array('text' => '<br />' . TABLE_HEADING_LANGUAGE_NAME.'<br />'.xtc_draw_radio_field('active','1',($lInfo->active=='1')?true:false) . ' '.TEXT_INFO_ACTIVE. ' <br />'.xtc_draw_radio_field('active','0',($lInfo->active=='0')?true:false).' '.TEXT_INFO_INACTIVE);      }

    Woher kommen die $active?

    Im case 'insert' fehlt demnach:

    PHP
    $active = xtc_db_prepare_input($_POST['active']);

    Hinzufügen Zeile 29 (case 'insert' )
    Erweiterung durch Active im Insert und in den Values[INDENT]
    xtc_db_query("insert into " . TABLE_LANGUAGES . " (name, code, image, directory, sort_order,language_charset,active) values ('" . xtc_db_input($name) . "', '" . xtc_db_input($code) . "', '" . xtc_db_input($image) . "', '" . xtc_db_input($directory) . "', '" . xtc_db_input($sort_order) . "', '" . xtc_db_input($charset) . "','".xtc_db_input($active)."')");
    [/INDENT]Hinzufügen ab Zeile 118 (case 'save')
    zuerst beim abruf der Variable aus dem $_POST.[INDENT]$active = xtc_db_prepare_input($_POST['active']);[/INDENT]nun den Update-Query erweitern[INDENT]xtc_db_query("update " . TABLE_LANGUAGES . " set name = '" . xtc_db_input($name) . "', code = '" . xtc_db_input($code) . "', image = '" . xtc_db_input($image) . "', directory = '" . xtc_db_input($directory) . "', sort_order = '" . xtc_db_input($sort_order) . "', language_charset = '" . xtc_db_input($charset) . "', active = '" . xtc_db_input($active) . "' where languages_id = '" . xtc_db_input($lID) . "'");[/INDENT]

    Nun, ich weiß was jedes einzelne Stückchen Code macht, aber ein "Laie" kommt damit, glaube ich, nicht so richtig zu recht. Versuche mal Struktur in den Code zu bekommen. Etwa so:

    #################################
    /admin/language.php

    Suche:

    PHP
    Code

    Füge danach ein: oder Ersetze mit:

    PHP
    neuer Code

    ----------------------------------------------------------

    Ergänzungen gleiche Datei

    #################################
    /includes/ nächste Datei

    #################################


    Nutze die Code Funktion dieses Editors, dann bleibts auch übersichtlich :)

    Ansonsten funktioniert das natürlich alles.