2012-01-19 87 views
0

我在php4中有一个presta模块。它通过连接到prestashop的数据库并打印出xml来工作。当试图上传到他们的应用程序商店,他们问我做了php5并遵循某些程序。在prestashop中创建一个模块:error'class Module can not be found'

  • 简而言之,它只是一个完整的结构代码,有1个方法可以连接到prestashop数据库并打印出xml。

所以问题是如何让它符合prestashop所要求的php5标准。当我尝试时,我得到这个错误。 “类模块无法找到”

<?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!'; 
} 

    } 

?> 

回答

1

我前段时间写了一系列的文章写作模块的Prestashop的proceedure,你可能找到有帮助的:Writing your own Prestashop Module Part 1

这些描述了基本的体系结构以及模块的典型实现方式。

虽然你希望这个脚本是独立的而不是从Backoffice管理界面中生成的xml,如果是这种情况,那么这不会被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编程!

+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框架。

相关问题