2016-07-31 110 views
0

我创建了一个简单的模块来显示字符串在左列中它的作品,但我想扩展它在我的商店中添加此文本的所有可用语言的可能性。现在我模块配置页面我只有输入字符串,我怎么可以添加这个按钮旁边的语言选择,以及如何将它保存到数据库?添加multilangage到模块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

它在前台工作正常,但在配置页面中是Notice Undefined index:SOMETEXT_TEXT_因此,当我切换语言时,所有输入均为空白。我觉得在函数getConfigFormValues() –

+1

我升级的函数有问题,现在看! –

+0

就是这样!谢谢。 –

相关问题