2012-01-19 2 views
0

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

  • Вкратце, это всего лишь полный структурный код с 1 методом, который подключается к базе данных 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>'; 

Это proceedure кодирования я должен следовать из 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!'; 
} 

    } 

?> 

ответ

1

я написал ряд статей по написанию модулей для PrestaShop некоторое время назад, что вы можете находят полезным: Writing your own Prestashop Module Part 1

Здесь описывается базовая архитектура и способы реализации модулей.

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

Независимо от того, записываете ли вы автономный скрипт или модуль, вам также необходимо использовать различные вызовы API Prestashop для извлечения информации о продукте, а не просто выполнить sql в необработанных таблицах базы данных. Причина этого заключается в том, что в raw 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!

+0

Я был бы рад посмотреть на него и помочь, просто напишите мне сообщение, и мы сможем разобраться, если вы все еще работаете над этим. –

+0

ОК. разместил его на вашей стене http://www.ecartservice.net/free-prestashop-modules/prestashop-google-product-search/comment-page-1/#comment-14877 – karto

0

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

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

Это позволит вам использовать module класс, а также что-нибудь еще из рамок PrestaShop вам нужно использовать.

Смежные вопросы