【问题标题】:javascript code with php into .tpl prestashop带有 php 的 javascript 代码到 .tpl prestashop
【发布时间】:2015-06-15 21:22:07
【问题描述】:

我正在尝试使用 javascript 和 php 做一个条件选择器。我之前已经做过了,但是在wordpress(纯php)中,现在我要适应prestashop(.tpl文件)。

在 .tpl 中编写 php 并不容易,并将 Smarty 更新为 SmartyBC 类。但我还是很复杂

/public_html/controllers/front/certificadosController.php

class certificadosControllerCore extends FrontController{

      public $php_self = 'certificados';

      public function init(){
         parent::init();
      }
      public function initContent(){
          parent::initContent();
          $this->setTemplate(_PS_THEME_DIR_.'certificados.tpl');
      }
} 

function ConectarBD() {
 // connect to db
}

function TraerProd() {    
//get all products 
}

function TraerAttr($vid_prod) {
 //get atributtes 
}

逻辑是这样的吗?我正在使用标签 {php} php code {/ php} {literal} js code {/ literal}

我向他们展示了我的一段代码,prestashop 显然没有很好地解释。

/public_html/themes/theme/certificados.tpl

{literal}

var_attr = '<option value="default" selected>Diametro</option>';
sel_attr = $('#attr');

$('select').change(function() {
    switch(this.id) {

    case 'producto':

        sel_attr.find('option').remove();
        sel_attr.append(var_attr);
        sel_attr.show();
        sel_attr.removeAttr('disabled');

        if (this.value == 'Válvula_de_bloqueo_Pead' ) {
            for (i = 0; i < Válvula_de_bloqueo_Pead.length; i++) {
                    $("#attr").append(
                            '<option value="' + Válvula_de_bloqueo_Pead[i] + '">' + Válvula_de_bloqueo_Pead[i] + '</option>'
                    );
            }

        {/literal}
        {php}

$Prod=array(); 
$Prod=TraerProd();

if (!empty($Prod)) { 
    $cntProd=count($Prod); 
}; 

            for ($k = 0; $k < $cntProd; $k++) {

                $_prod = $Prod[$k]['name']; $_prod = str_replace(array(' ', '-', '"', '/', '.', 'ñ'), array('_', '_', '', '_', '_', 'n'), $_prod);

                $Attr=array();
                $id_prod=$Prod[$k]['ID'];
                $Attr=TraerAttr($id_prod);

                if (!empty($Attr)) {

                    echo '} else if (this.value =='.$_prod.') { for (i = 0; i <'.$_prod.'.length; i++) { $("#attr").append("    <option value="\'+'.$_prod.'[i]+\'">\'+'.$_prod.'[i]+\'</option>");}';

                }
            } /* cierre if, for (php) */ 

        {/php}
        {literal}

        } //cierre if (js)
    break;
}

看到结果链向我展示了切口,我认为这是过度使用标签 {php} 和 {literal}

这是JSFiddle 让我知道我想要完成什么,我重复一遍,就像我在 wp 中所做的那样,但是 .tpl 文件让我很复杂:(

我希望你能帮助我,对不起我的英语不好。谢谢!

【问题讨论】:

  • 一些提示;永远不要在类文件中编写函数。我相信这违反了 PSR 规则。编号。 2 - 不要在 .tpl 文件中编写 yoru 逻辑! .tpl 严格用于输出数据。计算代码文件(控制器)中的数据。编号。 3 - 不要在你的代码中写特殊字符!仅使用英文字符
  • 你应该关闭最后一个{literal}标签

标签: javascript php prestashop


【解决方案1】:

在 tpl 中你应该只使用 smarty(prestashop 模板系统)读取你的 php 变量,字面量用于不读取 {} 中的内容作为 php 变量,因此你可以声明一个 js 对象。

在您的控制器中,您应该像这样将变量分配给 tpl:

$this->context->smarty->assign(
array(
            'link' => $this->context->link,
            'collectionList' => $collectionList, 
            )
);

即使在你的循环中,你也需要使用“聪明的方式”

{for $foo=1 to 3}
   <li>{$foo}</li>
{/for}

<script>
   var myVar = {$myPhpVar}; 
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多