繁体   English   中英

向模块PrestaShop添加多语言

[英]Adding multilangage to module PrestaShop

我创建了一个用于在lef列中显示字符串的简单模块,但我想将其扩展为以我店中所有可用语言添加此文本的可能性。 现在,在模块配置页面上,我仅输入字符串,如何在带有语言选择的该按钮旁边添加以及如何将其保存到数据库中?

   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');
    }
}

}

我会这样改变:

<?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');
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM