2016-07-31 2 views
0

文字列を表示するための単純なモジュールを作っていますが、このテキストを私の店で利用可能なすべての言語で追加する可能性があります。今すぐiモジュール設定ページ私は文字列の入力のみを持っていますが、このボタンの隣にどのように言語を選択し、どのようにデータベースに保存すればいいですか?モジュールに多言語を追加する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

私は私にあなたが使用しているPrestaShopのバージョンのデモを、取得することはできませんよ? –

+0

私はこれまでのコードを編集していますが、これは正解です。1.5と1.6バージョンのprestashopで動作するはずです。 –

答えて

1

私は、このように変更します

<?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

フロントオフィスで正常に動作しますが、設定ページにあります。通知未定義インデックス:SOMETEXT_TEXT_言語を切り替えるとすべての入力が空白になります。私は関数に何か間違っていると思うgetConfigFormValues() –

+1

私は今、時計を機能をアップグレード! –

+0

それはそれです!ありがとう。 –

関連する問題