Jump to content

PrestaShop AJAX Kullanımı Hakkında Yardım


byhero41

Recommended Posts

Merhabalar, prestashop'a yeni başladım ve bir modül yazmak istiyorum. Modülde yapmam gereken işlem ajax ile bir data gönderip veritabanından datanın karşılığını almak. Fakat şöyle bir sıkıntım var.

$this->html olarak istediğim tasarımı yerleştirdim ve jquery ile datayı alıyorum. İşin ajax kısmında post etme konusunda biraz sıkıntı çekiyorum.

public funtion htmlbas(){

$this->html vsvs

}

public function datalarıAl($data){

/*datayı oku ve return et

}

1. Fonksiyon içerisine yazdığım html kodlarının arasına script kodlarımı yerleştirdim ve 1. fonksiyondaki ajaxdan 2. fonksiyona veri gönderip cevap almak istiyorum. Bu yaptığım işlem mantıksız mı? veya bunun bil alternatifi var mı?

 

Kodları örnek olarak vermek gerekirse

    public function hookAdminStatsModules()
    {
        $test = Tools::getHttpHost(true).__PS_BASE_URI__;
        echo $test;
        $data = $this->getProductData();
        $this->html = $data;
        $this->html = '<div class="panel">
        <div class="panel-heading">
        ' . $this->displayName . '
    </div>
    <h4>' . $this->trans('Guide', array(), 'Admin.Global') . '</h4>
    <div class="alert alert-warning">
        <h4>Görecekleriniz Hakkında</h4>
        <p>Bu alanda göreceğiniz bilgiler bu güne kadar yaptığınız satışların detaylı olarak istatistiğini izlemenizi sağlar        </p>
        <p>Hangi üründen ne kadar sattığınız ve ne kadar kâr ettiğiniz bu ürünleri hangi ülkelere sattığınız hakkında detaylı bilgilere ulaşabilirsiniz.
    </div>
        <table class="table">
            <thead>
                <tr>
                    <th scope="col">Toplam Satış</th>
                    <th scope="col">Satılan Ürün</th>
                    <th scope="col">Detay</th>
                </tr>
            </thead>
            <tbody>
            ';
                foreach ($data as $value) {
                $this->html .=  '<tr>
                      <td>'.$value['qty'].'</td>
                      <td>'.$value['name'].'</td>
                      <td><a href="#" class="product_detay" data_id="'.$value['product_id'].'">İncele</a></td>
                  </tr>';
              }
              $this->html.='
            </tbody>
       </table>
    </div>
    <script>
    $(document).ready(function() {
        $(".product_detay").click(function(e) {
            id = $(this).attr("data_id");
            $.ajax({
                type: "POST",
                url: \'modules/urunistatistik/urunistatistik.php\',

                data:{
                    ajax:true,
                    controller:\'ajaxProductData\',
                    product_id:id
                },
                dataType: "dataType",
                success: function(response) {
                    console.log(response)
                },
                error: function (error) {
                    console.log(error)
                    console.log(this.url+this.data)
                }
            });
        });
    });
    </script>    
    ';

        return $this->html;
    }

    public function ajaxProductData($product_id)
    {
        return 1;
    }
    public function getProductData()
    {
        $sql = 'SELECT sum(product_quantity) as qty, ps_product_lang.name, product_id FROM ps_order_detail, ps_product_lang where ps_order_detail.product_id = ps_product_lang.id_product group by ps_product_lang.name order by qty DESC limit 50';
        $result = Db::getInstance()->executeS($sql);
        return array_merge($result);
    }

 

Link to comment
Share on other sites

Merhaba arakdaşlar sorunumu uzun uğraşlar sonucu çözdüm. Buraya çözümünü yazıyorum, benim gibi bilgi sahibi olmayan arkadaşlar nasıl yapacakları hakkında biraz bilgi edinebiliriler

ajax'ı kullanabilmek için bir köprü oluşturmamız gerekiyor. Bu köprü de başka bir php dosyası üzerinden oluyor. Adı ajax.php olsun

<?php
// Located in /modules/mymodule/ajax.php
require_once(dirname(__FILE__).'../../../config/config.inc.php');
require_once(dirname(__FILE__).'../../../init.php');
require_once('urunistatistik.php');
if (Tools::getIsset('product_id') && Tools::getIsset('action')) {
    $data = new urunistatistik;
    echo $data->ajaxProductData();
}

ajax php içerisine referans alacağımız classlarımızın bulunduğu dosyayı ekliyoruz.

işin jquery tarafında ise şu şekilde işliyor

$.ajax({
                method:'POST',
                url: '../modules/urunistatistik/ajax.php',
                data: {
                    action:'ajaxProductData',
                    product_id:id,   
                },
                success: function(response) {
                  console.log(response)
                }
              });

url'mizi ajax.php dosyamıza yönlendiriyoruz ve data olarak classlarımızın bulunduğu referans dosyamızında kullanacağımız fonksiyonun adını gönderiyoruz. işlem bu şekilde.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...