2015-06-10 54 views
0

我想做一個JavaScript和PHP的條件選擇器。我已經做過,但在WordPress(純PHP)中,現在我必須適應prestashop(.tpl文件)。JavaScript代碼與PHP到.tpl prestashop

在.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代碼{/ php} {literal} js代碼{/ 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}和{}文字

這是JSFiddle有我想要完成的想法,我再說一遍,因爲我在wp中,但.tpl文件使我複雜化所有:(

我希望你能幫助我,對不起我的壞英語。 謝謝!

+1

一些技巧;絕對不要在類文件中寫入函數。我相信這是違反PSR規則的。 NR。 2 - 不要在.tpl文件中寫入yoru邏輯! .tpl嚴格用於輸出數據。計算代碼文件(控制器)中的數據。 NR。 3 - 不要在代碼中寫入特殊字符!只能使用英文字符 – gskema

+0

您應該關閉最後一個'{literal}'標記 – UnLoCo

回答

0

在tpl中,您應該只使用smarty(prestashop模板系統)來讀取您的php變量,literal用於不讀取{}中的內容作爲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>