2016-07-31 12 views
0

Ich erstelle ein einfaches Modul für die Anzeige von String in der linken Spalte, es funktioniert, aber ich möchte es erweitern Möglichkeit diesen Text in allen verfügbaren Sprache in meinem Shop hinzufügen. Momentan habe ich Modul-Konfigurationsseite nur für String eingegeben, wie kann ich neben dieser Schaltfläche mit Sprachauswahl hinzufügen und wie in der Datenbank speichern?Hinzufügen multilangage zu Modul PrestaShop

if (!defined('_PS_VERSION_')) { 
exit; 
} 

class Sometext extends Module 
{ 
protected $config_form = false; 

public function __construct() 
{ 
    $this->name = 'sometext'; 
    $this->tab = 'front_office_features'; 
    $this->version = '1.0.0'; 
    $this->author = 'AgnesTom'; 
    $this->need_instance = 1; 

    /** 
    * Set $this->bootstrap to true if your module is compliant with bootstrap (PrestaShop 1.6) 
    */ 
    $this->bootstrap = true; 

    parent::__construct(); 

    $this->displayName = $this->l('sometext'); 
    $this->description = $this->l('some text in left column'); 
} 

/** 
* Don't forget to create update methods if needed: 
* http://doc.prestashop.com/display/PS16/Enabling+the+Auto-Update 
*/ 
public function install() 
{ 
    Configuration::updateValue('SOMETEXT_TEXT', false); 

    return parent::install() && 
     $this->registerHook('header') && 
     $this->registerHook('backOfficeHeader') && 
     $this->registerHook('displayLeftColumn'); 
} 

public function uninstall() 
{ 
    Configuration::deleteByName('SOMETEXT_TEXT'); 

    return parent::uninstall(); 
} 

/** 
* Load the configuration form 
*/ 
public function getContent() 
{ 
    /** 
    * If values have been submitted in the form, process. 
    */ 
    if (((bool)Tools::isSubmit('submitSometextModule')) == true) { 
     $this->postProcess(); 
    } 

    $this->context->smarty->assign('module_dir', $this->_path); 

    $output = $this->context->smarty->fetch($this->local_path.'views/templates/admin/configure.tpl'); 

    return $output.$this->renderForm(); 
} 

/** 
* Create the form that will be displayed in the configuration of your module. 
*/ 
protected function renderForm() 
{ 
    $helper = new HelperForm(); 

    $helper->show_toolbar = false; 
    $helper->table = $this->table; 
    $helper->module = $this; 
    $helper->default_form_language = $this->context->language->id; 
    $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG', 0); 

    $helper->identifier = $this->identifier; 
    $helper->submit_action = 'submitSometextModule'; 
    $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false) 
     .'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name; 
    $helper->token = Tools::getAdminTokenLite('AdminModules'); 

    $helper->tpl_vars = array(
     'fields_value' => $this->getConfigFormValues(), /* Add values for your inputs */ 
     'languages' => $this->context->controller->getLanguages(), 
     'id_language' => $this->context->language->id, 
    ); 

    return $helper->generateForm(array($this->getConfigForm())); 
} 

/** 
* Create the structure of your form. 
*/ 
protected function getConfigForm() 
{ 
    return array(
     'form' => array(
      'legend' => array(
      'title' => $this->l('Settings'), 
      'icon' => 'icon-cogs', 
      ), 
      'input' => array(
       array(
        'col' => 3, 
        'type' => 'text', 
        'prefix' => '<i class="icon icon-envelope"></i>', 
        'desc' => $this->l('Enter a text'), 
        'name' => 'SOMETEXT_TEXT', 
        'label' => $this->l('Email'), 
       ), 
      ), 
      'submit' => array(
       'title' => $this->l('Save'), 
      ), 
     ), 
    ); 
} 

/** 
* Set values for the inputs. 
*/ 
protected function getConfigFormValues() 
{ 
    return array(
     'SOMETEXT_TEXT' => Configuration::get('SOMETEXT_TEXT', 'Some text here'), 
    ); 
} 

/** 
* Save form data. 
*/ 
protected function postProcess() 
{ 
    $form_values = $this->getConfigFormValues(); 

    foreach (array_keys($form_values) as $key) { 
     Configuration::updateValue($key, Tools::getValue($key)); 
    } 
} 

/** 
* Add the CSS & JavaScript files you want to be loaded in the BO. 
*/ 
public function hookBackOfficeHeader() 
{ 
    if (Tools::getValue('module_name') == $this->name) { 
     $this->context->controller->addJS($this->_path.'views/js/back.js'); 
     $this->context->controller->addCSS($this->_path.'views/css/back.css'); 
    } 
} 

/** 
* Add the CSS & JavaScript files you want to be added on the FO. 
*/ 
public function hookHeader() 
{ 
    $this->context->controller->addJS($this->_path.'/views/js/front.js'); 
    $this->context->controller->addCSS($this->_path.'/views/css/front.css'); 
} 

public function hookDisplayLeftColumn() 
{ 
    $some_string = Configuration::get('SOMETEXT_TEXT'); 
    if (isset($some_string)) { 
    $this->context->smarty->assign('some_string', $some_string); 
     return $this->display(__FILE__, '/views/templates/front/front.tpl'); 
    } 
} 

}

+0

ich nicht in der Lage bin mir eine Demo zu bekommen, die PrestaShop-Version verwenden Sie? –

+0

Ich habe den obigen Code bearbeitet, jetzt ist es korrekt, es sollte in Version 1.5 und 1.6 von Prestashop funktionieren. –

Antwort

1

ich auf diese Weise ändern würde:

<?php 

if (!defined('_PS_VERSION_')) { 
    exit; 
} 

class Sometext extends Module 
{ 
    protected $config_form = false; 

    public function __construct() 
    { 
     $this->name = 'sometext'; 
     $this->tab = 'front_office_features'; 
     $this->version = '1.0.0'; 
     $this->author = 'AgnesTom'; 
     $this->need_instance = 1; 

     /** 
     * Set $this->bootstrap to true if your module is compliant with bootstrap (PrestaShop 1.6) 
     */ 
     $this->bootstrap = true; 

     parent::__construct(); 

     $this->displayName = $this->l('sometext'); 
     $this->description = $this->l('some text in left column'); 
    } 

    /** 
    * Don't forget to create update methods if needed: 
    * http://doc.prestashop.com/display/PS16/Enabling+the+Auto-Update 
    */ 
    public function install() 
    { 

     $languages = Language::getLanguages(false); 

     foreach ($languages as $lang) 
     { 
      //$values[] = Tools::getValue('SOMETEXT_TEXT_'.$lang['id_lang']); 
      Configuration::updateValue('SOMETEXT_TEXT_'.$lang['id_lang'], ''); 
     } 

     return parent::install() && 
      $this->registerHook('header') && 
      $this->registerHook('backOfficeHeader') && 
      $this->registerHook('displayLeftColumn'); 
    } 

    public function uninstall() 
    { 
     $languages = Language::getLanguages(false); 

     foreach ($languages as $lang) 
     { 
      //$values[] = Tools::getValue('SOMETEXT_TEXT_'.$lang['id_lang']); 
      Configuration::deleteByName('SOMETEXT_TEXT_'.$lang['id_lang']); 
     } 

     return parent::uninstall(); 
    } 

    /** 
    * Load the configuration form 
    */ 
    public function getContent() 
    { 
     /** 
     * If values have been submitted in the form, process. 
     */ 
     if (((bool)Tools::isSubmit('submitSometextModule')) == true) { 
      $this->postProcess(); 
     } 

     //$this->context->smarty->assign('module_dir', $this->_path); 

     //$output = $this->context->smarty->fetch($this->local_path.'views/templates/admin/configure.tpl'); 

     //return $output.$this->renderForm(); 
     $this->context->smarty->assign('form', $this->renderForm()); 
     return $this->display(__FILE__, '/views/templates/admin/configure.tpl'); 
    } 

    /** 
    * Create the form that will be displayed in the configuration of your module. 
    */ 
    protected function renderForm() 
    { 
     $helper = new HelperForm(); 

     $helper->show_toolbar = false; 
     $helper->table = $this->table; 
     $lang = new Language((int)Configuration::get('PS_LANG_DEFAULT')); 
     $helper->default_form_language = $this->context->language->id; 
     $helper->module = $this; 
     //$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG', 0); 
     $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0; 

     $helper->identifier = $this->identifier; 
     $helper->submit_action = 'submitSometextModule'; 
     $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false) 
      .'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name; 
     $helper->token = Tools::getAdminTokenLite('AdminModules'); 

     $helper->tpl_vars = array(
      'fields_value' => $this->getConfigFormValues(), /* Add values for your inputs */ 
      'languages' => $this->context->controller->getLanguages(), 
      'id_language' => $this->context->language->id, 
     ); 

     return $helper->generateForm(array($this->getConfigForm())); 
    } 

    /** 
    * Create the structure of your form. 
    */ 
    protected function getConfigForm() 
    { 
     return array(
      'form' => array(
       'legend' => array(
       'title' => $this->l('Settings'), 
       'icon' => 'icon-cogs', 
       ), 
       'input' => array(
        array(
         'col' => 3, 
         'type' => 'text', 
         'prefix' => '<i class="icon icon-envelope"></i>', 
         'desc' => $this->l('Enter a text'), 
         'name' => 'SOMETEXT_TEXT', 
         'label' => $this->l('Email'), 
         'lang' => true 
        ), 
       ), 
       'submit' => array(
        'title' => $this->l('Save'), 
       ), 
      ), 
     ); 
    } 

    /** 
    * Set values for the inputs. 
    */ 
    protected function getConfigFormValues() 
    { 

     $languages = Language::getLanguages(false); 
     $values = array(); 

     foreach ($languages as $lang) 
     { 
      if(Tools::getValue('SOMETEXT_TEXT_'.$lang['id_lang'])) $values['SOMETEXT_TEXT'][$lang['id_lang']] = Tools::getValue('SOMETEXT_TEXT_'.$lang['id_lang']); 
     } 
     return $values; 

    } 

    /** 
    * Save form data. 
    */ 
    protected function postProcess() 
    { 
     $form_values = $this->getConfigFormValues(); 

     foreach ($form_values['SOMETEXT_TEXT'] as $k=>$key) { 
      Configuration::updateValue('SOMETEXT_TEXT_'.$k, $key); 
     } 
    } 

    /** 
    * Add the CSS & JavaScript files you want to be loaded in the BO. 
    */ 
    public function hookBackOfficeHeader() 
    { 
     if (Tools::getValue('module_name') == $this->name) { 
      $this->context->controller->addJS($this->_path.'views/js/back.js'); 
      $this->context->controller->addCSS($this->_path.'views/css/back.css'); 
     } 
    } 

    /** 
    * Add the CSS & JavaScript files you want to be added on the FO. 
    */ 
    public function hookHeader() 
    { 
     $this->context->controller->addJS($this->_path.'/views/js/front.js'); 
     $this->context->controller->addCSS($this->_path.'/views/css/front.css'); 
    } 

    public function hookDisplayLeftColumn() 
    { 
     $some_string = Configuration::get('SOMETEXT_TEXT_'.$this->context->language->id); 
     if (isset($some_string)) { 
     $this->context->smarty->assign('some_string', $some_string); 
      return $this->display(__FILE__, '/views/templates/front/front.tpl'); 
     } 
    } 
} 
+0

Es funktioniert korrekt im Front-Office, aber in der Konfigurationsseite ist Beachten Undefinierter Index: SOMETEXT_TEXT_ so alle Eingaben, wenn ich die Sprache wechseln bin leer. Ich denke, es ist etwas falsch in der Funktion getConfigFormValues ​​() –

+1

Ich habe Funktionen aktualisiert, jetzt gucken! –

+0

Das ist es! Vielen Dank. –

Verwandte Themen