如何将 jquery ui 滑块添加到 PrestaShop 模块表单
How to add a jquery ui slider to a PrestaShop module form
我想在我的 PrestaShop 模块的配置页面上添加一个范围滑块。我尝试使用 HelperForm class 来做到这一点,但我无法做到这一点,如果我写其他类型,例如 'textarea' 或 'checkbox',它工作正常,即使不是真正的标准输入类型,例如 'color',但 'range' 不起作用
<?php
if (!defined('_PS_VERSION_'))
exit;
class icropper extends Module
{
public function __construct()
{
$this->name = 'icropper';
$this->tab = 'front_office_features';
$this->version = '1.0';
$this->author = 'AppDev';
$this->need_instance = 1;
$this->ps_versions_compliancy = array('min' => '1.5', 'max' => _PS_VERSION_);
parent::__construct();
$this->displayName = $this->l('icropper');
$this->description = $this->l('Module for Cropping Images');
$this->confirmUninstall = $this->l('Are you sure you want to uninstall?');
if (!Configuration::get('MYMODULE_NAME'))
$this->warning = $this->l('No name provided');
}
public function install()
{
$filename = _PS_ROOT_DIR_.'/override/cropp.php';
$ext = get_loaded_extensions();
foreach($ext as $i)
{
if($i == "imagick") {
$imgck = $i;
break;
}
}
if (!parent::install()) {
return false;
} elseif (!$imgck) {
$this->context->controller->errors[] = $this->l('In your server does not installed Imagick library');
return false;
} elseif(file_exists($filename)) {
$this->context->controller->errors[] = $this->l('File that override cropping
already exist, please delete it and replace file by yourself');
return false;
}else {
//copy(__DIR__ . '/override/list_footer.tpl', _PS_ROOT_DIR_ . '/override/helpers/admin/templates/list');
return true;
}
}
public function uninstall()
{
if (!parent::uninstall())
return false;
return true;
}
public function getContent()
{
return $this->DisplayForm();
}
public function displayForm(){
$fields_formm[0] = array(
'form' => array(
'legend' => array(
'title' => $this->l('Header'),
'icon' => 'icon-file-text'
),
'input' => array(
array(
'type' => '',
'name'=> 'vania',
'min'=>0,
'max'=>100,
'step'=>1
),
'submit' => array(
'title' => $this->l('Generate')
)
)
)
);
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$lang = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$helper->default_form_language = 1;
$this->fields_formm = array();
$helper->submit_action = 'submitform';
return $helper->generateForm(array($fields_formm[0]));
}
}
?>
您必须扩展辅助表单的视图。我会努力 guide 你 :).
首先,你的模块必须挂在这个钩子上 'displayBackOfficeHeader':
public function install(){
[...]
$this->registerHook('backOfficeHeader');
[...]
}
因此编辑您的代码以添加这行代码。
第二步,为hook添加函数,为slider加载、查询和jqueryui
public function hookBackOfficeHeader($params){
if ( Tools::getValue('module_name') == $this->name OR Tools::getValue('configure') == $this->name ) {
$this->context->controller->addJquery();
$this->context->controller->addJqueryUI('ui.slider');
}
}
第三步,在 fields_form 数组中的输入中添加一个 'new' 类型,例如 rangeslider
,我建议您使用以下更正的代码行:
public function displayForm(){
$fields_form = array(
'form' => array(
'legend' => array(
'title' => $this->l('Header'),
'icon' => 'icon-file-text'
),
'input' => array(
array(
'type' => 'rangeslider',
'name'=> 'vania',
'label' => $this->l('Select range'),
'min'=>0,
'max'=>100,
'step'=>1
),
),
'submit' => array(
'title' => $this->l('Generate')
)
)
);
$helper = new HelperForm();
$helper->show_toolbar = false;
$lang = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$helper->module = $this;
$helper->default_form_language = $this->context->language->id;
$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->submit_action = 'submitform';
return $helper->generateForm(array($fields_form));
}
第四步,在此目录下添加文件名form.tpl
:
icropper/views/templates/admin/_configure/helpers/form/form.tpl
内容如下:
{extends file="helpers/form/form.tpl"}
{block name="field"}
{if $input.type == 'rangeslider'}
<div class="col-lg-9">
<div id="slider-range"></div>
<p>
<label for="amount">Price range:</label>
<input type="text" id="amount" readonly style="border:0; color:#f6931f; font-weight:bold;">
</p>
</div>
<script type="text/javascript">
{literal}
$( function() {
$( "#slider-range" ).slider({
range: true,
min: {/literal}{$input.min|intval}{literal},
max: {/literal}{$input.max|intval}{literal},
step: {/literal}{$input.step|intval}{literal},
slide: function( event, ui ) {
$( "#amount" ).val( "$" + ui.values[ 0 ] + " - $" + ui.values[ 1 ] );
}
});
$( "#amount" ).val( "$" + $( "#slider-range" ).slider( "values", 0 ) +
" - $" + $( "#slider-range" ).slider( "values", 1 ) );
});
{/literal}
</script>
{else}
{$smarty.block.parent}
{/if}
{/block}
给你,这是将范围滑块添加到表单(或其他输入类型)的方法,顺便说一下,在这种情况下,我合并了 smarty 和 javascript q[= 的代码40=]ckness,但如果我们想要尊重 prestashop mvc,我们必须制作一个带有滑块初始化的不同 js 文件,太长无法解释 XD。
干杯 ;).
如果我遗漏了什么请告诉我:)。
我想在我的 PrestaShop 模块的配置页面上添加一个范围滑块。我尝试使用 HelperForm class 来做到这一点,但我无法做到这一点,如果我写其他类型,例如 'textarea' 或 'checkbox',它工作正常,即使不是真正的标准输入类型,例如 'color',但 'range' 不起作用
<?php
if (!defined('_PS_VERSION_'))
exit;
class icropper extends Module
{
public function __construct()
{
$this->name = 'icropper';
$this->tab = 'front_office_features';
$this->version = '1.0';
$this->author = 'AppDev';
$this->need_instance = 1;
$this->ps_versions_compliancy = array('min' => '1.5', 'max' => _PS_VERSION_);
parent::__construct();
$this->displayName = $this->l('icropper');
$this->description = $this->l('Module for Cropping Images');
$this->confirmUninstall = $this->l('Are you sure you want to uninstall?');
if (!Configuration::get('MYMODULE_NAME'))
$this->warning = $this->l('No name provided');
}
public function install()
{
$filename = _PS_ROOT_DIR_.'/override/cropp.php';
$ext = get_loaded_extensions();
foreach($ext as $i)
{
if($i == "imagick") {
$imgck = $i;
break;
}
}
if (!parent::install()) {
return false;
} elseif (!$imgck) {
$this->context->controller->errors[] = $this->l('In your server does not installed Imagick library');
return false;
} elseif(file_exists($filename)) {
$this->context->controller->errors[] = $this->l('File that override cropping
already exist, please delete it and replace file by yourself');
return false;
}else {
//copy(__DIR__ . '/override/list_footer.tpl', _PS_ROOT_DIR_ . '/override/helpers/admin/templates/list');
return true;
}
}
public function uninstall()
{
if (!parent::uninstall())
return false;
return true;
}
public function getContent()
{
return $this->DisplayForm();
}
public function displayForm(){
$fields_formm[0] = array(
'form' => array(
'legend' => array(
'title' => $this->l('Header'),
'icon' => 'icon-file-text'
),
'input' => array(
array(
'type' => '',
'name'=> 'vania',
'min'=>0,
'max'=>100,
'step'=>1
),
'submit' => array(
'title' => $this->l('Generate')
)
)
)
);
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$lang = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$helper->default_form_language = 1;
$this->fields_formm = array();
$helper->submit_action = 'submitform';
return $helper->generateForm(array($fields_formm[0]));
}
}
?>
您必须扩展辅助表单的视图。我会努力 guide 你 :).
首先,你的模块必须挂在这个钩子上 'displayBackOfficeHeader':
public function install(){
[...]
$this->registerHook('backOfficeHeader');
[...]
}
因此编辑您的代码以添加这行代码。
第二步,为hook添加函数,为slider加载、查询和jqueryui
public function hookBackOfficeHeader($params){
if ( Tools::getValue('module_name') == $this->name OR Tools::getValue('configure') == $this->name ) {
$this->context->controller->addJquery();
$this->context->controller->addJqueryUI('ui.slider');
}
}
第三步,在 fields_form 数组中的输入中添加一个 'new' 类型,例如 rangeslider
,我建议您使用以下更正的代码行:
public function displayForm(){
$fields_form = array(
'form' => array(
'legend' => array(
'title' => $this->l('Header'),
'icon' => 'icon-file-text'
),
'input' => array(
array(
'type' => 'rangeslider',
'name'=> 'vania',
'label' => $this->l('Select range'),
'min'=>0,
'max'=>100,
'step'=>1
),
),
'submit' => array(
'title' => $this->l('Generate')
)
)
);
$helper = new HelperForm();
$helper->show_toolbar = false;
$lang = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$helper->module = $this;
$helper->default_form_language = $this->context->language->id;
$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->submit_action = 'submitform';
return $helper->generateForm(array($fields_form));
}
第四步,在此目录下添加文件名form.tpl
:
icropper/views/templates/admin/_configure/helpers/form/form.tpl
内容如下:
{extends file="helpers/form/form.tpl"}
{block name="field"}
{if $input.type == 'rangeslider'}
<div class="col-lg-9">
<div id="slider-range"></div>
<p>
<label for="amount">Price range:</label>
<input type="text" id="amount" readonly style="border:0; color:#f6931f; font-weight:bold;">
</p>
</div>
<script type="text/javascript">
{literal}
$( function() {
$( "#slider-range" ).slider({
range: true,
min: {/literal}{$input.min|intval}{literal},
max: {/literal}{$input.max|intval}{literal},
step: {/literal}{$input.step|intval}{literal},
slide: function( event, ui ) {
$( "#amount" ).val( "$" + ui.values[ 0 ] + " - $" + ui.values[ 1 ] );
}
});
$( "#amount" ).val( "$" + $( "#slider-range" ).slider( "values", 0 ) +
" - $" + $( "#slider-range" ).slider( "values", 1 ) );
});
{/literal}
</script>
{else}
{$smarty.block.parent}
{/if}
{/block}
给你,这是将范围滑块添加到表单(或其他输入类型)的方法,顺便说一下,在这种情况下,我合并了 smarty 和 javascript q[= 的代码40=]ckness,但如果我们想要尊重 prestashop mvc,我们必须制作一个带有滑块初始化的不同 js 文件,太长无法解释 XD。 干杯 ;).
如果我遗漏了什么请告诉我:)。