2017-08-09 65 views
1

我正在開發一個ps模塊,讓您可以分類產品附件並將它們顯示在前面的產品頁面中。在模塊類中使用ajax處理<select>值,prestashop 1.6

即時通訊使用可拖動列表和附件,當您將它們拖放到類別時,它將變爲選項標籤,每個類別都有一個選擇標籤,用於放置附件。

我想保存附件和它們被刪除的類別,所以我想做一個ajax調用將數據帶到我的模塊類,但我是新的與ajax和不能接近它。

這是世界衛生大會我做:

的js代碼(正確.tpl內):

<script> 
     $(".droptrue").droppable({ 

       drop: function(event, ui) { 
        //add <option> tag when an attachment is dropped to category's select 
        $(event.target).append('<option value="' + ui.draggable.attr('id') + '" selected>'+ui.draggable.text()+'</option>'); 
        //remove the <li> wich contained the attachment data 
        ui.draggable.fadeOut("slow").remove(); 

        var val = $('#categoryAttachmentArr').val(); 
        //var tab = val.split(','); 
        //for (var i=0; i < tab.length; i++) 
        //if (tab[i] == $(this).val()) 
        //  return false; 
        //create an array with the next format: 'id_category(1)'-'id_attachment(1)','id_category(2)'-'id_attachment(2)'[....] 
        //the comma will be the main character that will be splitted 
        $('#categoryAttachmentArr').val(val + ui.doppable.attr('id') + '-' + ui.draggable.attr('id') +','); 
       } 
     }); 

     $('#submitAddProduct').click(function(e){ 
      $.ajax({ 
       type: 'POST', 
       url: baseDir + 'modules/adjuntos/classes/CategoryAttachment.php', 
       data: { 
         ajax: true, 
         action: \'CategoryArray\', 
         cat_array: $('#categoryAttachmentArray').val(), 
        } 
       dataType: 'json', 
       success: function(json) { 
       console.log($('#categoryAttachmentArray').val()); 
       } 
     }); 
     }) 

     $(".ui-state-default").draggable({ 

       revert: "valid", 

     }); 
</script> 

而我的等級:

class CategoryAttachment extends Objectmodel 
{ 
    //other functions 
    public function ajaxProcessCategoryArray() 
    { 
     $CategoryAttachmentArr = Tools::getValue('cat_array') 
    } 
} 

回答

0

Finaly我得到的溶液中,你是一個人就會有這個問題未來。

我在.tpl代碼:

$(".ui-state-default").draggable(); 

     $(".droptrue").droppable({ 

       drop: function(event, ui) { 
        //add <option> tag when an attachment is dropped to category's select 
        $(event.target).append('<option value="' + ui.draggable.attr('id') + '" selected>'+ui.draggable.text()+'</option>'); 
        $('#selectAttachment1').append('<option value="' + ui.draggable.attr('id') + '" selected>'+ui.draggable.text()+'</option>') 
        //remove the <li> wich contained the attachment data 
        ui.draggable.fadeOut("slow").remove(); 

        var val = $('#categoryAttachmentArr').val(); 
        //make a serialize() type array 
        $('#categoryAttachmentArr').val(val + $(this).attr('id') + "=" + ui.draggable.attr('id') +"&"); 

        var value = $('#arrayAttachments').val(); 
        var tab = value.split(','); 
        for (var i=0; i < tab.length; i++) 
         if (tab[i] == ui.draggable.attr('id')){ 

          return false; 
         } 
        $('#arrayAttachments').val(value+ui.draggable.attr('id')+','); 

       } 
     }); 


     $('#submitCategories').click(function(e){ 
      var array = $('#categoryAttachmentArr').val() 
      $.ajax({ 
       url: '../modules/adjuntos/ajax-call.php', 
       data: { 
        action: 'handlearray', 
        token:new Date().getTime(), 
        cat: array 
       }, 
       method: 'POST', 
       success:function(data){ 
       $('#result').html(data); 
      } 
     }); 
     }); 

Ajax調用去我Ajax的call.php文件:

<?php 
//load ps config 
require_once(dirname(__FILE__).'../../../config/config.inc.php'); 
require_once(dirname(__FILE__).'../../../init.php'); 
require_once('adjuntos.php'); 
//adjuntos.php is the name of my module main file 
if(Tools::getIsset('token') && Tools::getIsset('action')) 
{ 
    $mp = new Adjuntos; 
    echo $mp->handleArray(); 
} 

的handleArray功能在我的模塊主要文件:(使它我的自定義類的調用)

public static function handleArray() 
{ 

    $html = ''; 
    $array = Tools::getValue('cat'); 
    $arrayExplode = explode("&", $array); 
    foreach($arrayExplode as $value) 
    { 
     $finalArr = explode("=", $value); 
     if (!CategoryAttachment::postProcess($finalArr)) 
     { 
      $html .= '<p style="color:red;>Fallo</p>"'; 
     }  
    } 
    $html .= '<p style="color:green;>Correcto</p>"'; 
    return $html; 
    } 

在我的自定義類的功能:

public static function postProcess($finalArr) 
    { 

     return Db::getInstance()->execute(
       'UPDATE ps_attachment SET id_category = '.$finalArr[0].' WHERE id_attachment = '.$finalArr[1] 
       ); 


    }//end 

這樣的工作就像一個魅力,使代碼更可擴展

0

您無法連接直接到任何班級。你必須使用控制器來做到這一點。

阿賈克斯將數據發送到控制器

控制器使用類保存數據

控制器返回結果到瀏覽器(JavaScript)的

+0

謝謝回答!所以我必須創建一個新的控制器,或者只需要創建一個新的PHP文件來處理這個問題。或者也許使用一個實際的管理控制器(例如產品控制器)。 你能舉個例子嗎? –

+0

您可以在模塊中使用自定義(前/管理員)控制器,或使用頁面上可用的Hooks來處理您的ajax過程。建議第一種方法。 –