создание модуля в prestashop: ошибка «Модуль класса не найден»

у меня есть модуль presta в php4. Он работает, подключаясь к базе данных prestashop и распечатывая xml. Пытаясь загрузить в свой магазин приложений, они попросили меня сделать его php5 и выполнить определенные процедуры.

  • В двух словах, это просто полный структурный код с одним методом, который подключается к базе данных prestashop и распечатывает xml.

Таким образом, проблема заключается в том, как заставить его соответствовать стандарту php5, требуемому prestashop. Когда я попытался, я получаю эту ошибку. "Модуль класса не найден"

<?php
include('config/settings.inc.php');
$con = mysql_connect(_DB_SERVER_, _DB_USER_, _DB_PASSWD_);
mysql_select_db(_DB_NAME_);
$str = '_DB_PREFIX_';
$str1 = constant($str);
$sql = 'SELECT '.
$str1.'product_lang.name,'.
$str1.'product.id_product as id,'.
$str1.'product.quantity,'.
$str1.'product.price,'.
$str1.'product.weight,'.
$str1.'product_lang.description,'.
$str1.'product_lang.link_rewrite as url,'.
$str1.'category_lang.name as category,'.
$str1.'manufacturer.name as manufacturer,'.
$str1.'image.id_image '.

'FROM '.
$str1.'product_lang '.
'INNER JOIN ' .$str1.'product '.
'ON ('.$str1.'product_lang.id_product = '.$str1.'product.id_product) '.
'INNER JOIN ' .$str1.'image '.
'ON ('.$str1.'image.id_product = '.$str1.'product.id_product) '.
'INNER JOIN ' .$str1.'manufacturer '.
'ON ('.$str1.'manufacturer.id_manufacturer = '.$str1.'product.id_manufacturer) '.
'INNER JOIN ' .$str1.'category_lang '.
'ON ('.$str1.'category_lang.id_category = '.$str1.'product.id_category_default) '.
//'WHERE '.$str1.'product_lang.id_lang = 1 AND '.$str1.'category_lang.id_lang = 1';
    'WHERE '.$str1.'product_lang.id_lang = 1';
    $result = mysql_query($sql);

     header("Content-Type: text/xml; charset=ISO-8859-1");
     $output = '<?xml version="1.0" encoding="utf-8"?>
     <products>';
     while($row = mysql_fetch_assoc($result)):
     //echo "<br><br><b>text:</b>".$text = addslashes($text);
     $text = str_replace(chr(145), "\'", $text);
 $output .= '
<product>
    <id>'. $row['id'].'</id>
    <name><![CDATA['.$name.']]></name>
    <description><![CDATA['.$text.']]></description>
            <image><![CDATA['. 'http://'.$_SERVER['HTTP_HOST'].__PS_BASE_URI__.'img/p/'.$row['id'].'-'.$row['id_image'].'.jpg' .']]></image>
        <quantity><![CDATA['. $row['quantity'] .']]></quantity> 
        <price><![CDATA['. $row['price'] .']]></price>
        <weight>'. $row['weight'] .'</weight>
    <category><![CDATA['.$category.']]></category>
    <manufacturer><![CDATA['. $manufacturer.']]></manufacturer>
            <url><![CDATA['.'http://'.$_SERVER['HTTP_HOST'].'/product.php?id_product='.$row['id'].']]></url>

     </product>';
 endwhile;

 print $output .= '
 </products>';

Это процедура кодирования, которой мне нужно следовать из prestashop.

<?php
       //Your class must have the same name than this file.

      class module_name extends Module
       {
      public function __construct()
       {

    //Name of your module. It must have the same name than the class
    $this->name = 'module_name';

    //You must choose an existing tab amongst the ones that are available
    $this->tab = 'You choose';

    //The version of your module. Do not forget to increment the version for each modification
    $this->version = '1.0';

    //The constructor must be called after the name has been set, but before you try to use any functions like $this->l()
    parent::__construct();

    //Name displayed in the module list
    $this->displayName = $this->l('Display Name on Back Office');

    //Short description displayed in the module list
    $this->description = $this->l('Description On Back Office');    
}

//You must implement the following methods if your module need to create a table, add configuration variables, or hook itself somewhere.
//-------------------------------
public function install()
{
    return parent::install();
}

public function uninstall()
{
    return parent::install();
}
//-------------------------------

//Display Configuration page of your module.
public function getContent()
{
    return 'Hello World!';
}

   }

 ?>

person karto    schedule 19.01.2012    source источник


Ответы (2)


Некоторое время назад я написал серию статей о написании модулей для prestashop, которые могут быть вам полезны: Написание собственного модуля Prestashop, часть 1

Они описывают базовую архитектуру и то, как обычно реализуются модули.

У меня такое ощущение, что вы хотите, чтобы этот скрипт был автономным, а не XML-файлом, сгенерированным на экранах администратора Backoffice? Если это так, то он не будет классифицироваться как «модуль» по определению Prestashop, и именно по этой причине он был отклонен.

Независимо от того, пишете ли вы автономный скрипт или модуль, вам также необходимо использовать различные вызовы Prestashop API для получения информации о продукте, а не просто выполнять sql для необработанных таблиц базы данных. Причина этого в том, что необработанный sql не будет учитывать такие факторы, как язык, налоги или конвертация валюты.

Примером того, как получить все продукты и распечатать информацию о них из модуля Prestashop, может быть:

global $cookie;

$products = Product::getProducts($cookie->id_lang, 0, NULL,'id_product', 'ASC');
foreach ($products AS product) {
  echo 'title: '. $product['name'];
  echo 'weight: '. $product['weight'];
  // .. etc. 
}

Всего наилучшего в программировании Prestashop!

person Paul Campbell    schedule 22.01.2012
comment
Я был бы рад взглянуть на это и помочь, просто напишите мне сообщение, и мы можем что-то решить, если вы все еще работаете над этим. - person Paul Campbell; 05.02.2012
comment
Ok. разместил его на своей стене ecartservice.net/free-prestashop-modules/ - person karto; 06.02.2012

Что вам нужно здесь, так это ваш код, чтобы оставаться в одиночестве. Для этого вам нужно самостоятельно инициализировать prestashop. Это, вероятно, самый надежный способ сделать это.

if (!defined('_PS_VERSION_')) {
    require_once '../../config/config.inc.php';
    require_once '../../init.php';
}

Это позволит вам использовать класс module, а также все остальное из фреймворка prestashop, которое вам нужно использовать.

person Goose    schedule 15.07.2015