将multilangage添加到模块PrestaShop

时间:2016-07-31 11:38:25

标签: php prestashop prestashop-1.6 prestashop-1.5

我创建了一个简单的模块,用于在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');
    }
}

}

1 个答案:

答案 0 :(得分: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');
        }
    }
}