PrestaShop 1.7 添加新资源和类

Posted

技术标签:

【中文标题】PrestaShop 1.7 添加新资源和类【英文标题】:PrestaShop 1.7 Add new resources and class 【发布时间】:2018-04-18 09:31:57 【问题描述】:

我用这段代码创建了新资源:

class WebserviceRequest extends WebserviceRequestCore 
public static function getResources()
    $resources = parent::getResources();

    // if you do not have class for your table
    $resources['test'] = array('description' => 'Manage My API', 'specific_management' => true);

    $resources['categoryecommerce'] = array('description' => 'o jacie marcin', 'class' => 'CategoryEcommerce');

    $mp_resource = Hook::exec('addMobikulResources', array('resources' => $resources), null, true, false);
    if (is_array($mp_resource) && count($mp_resource)) 
        foreach ($mp_resource as $new_resources) 
            if (is_array($new_resources) && count($new_resources)) 
                $resources = array_merge($resources, $new_resources);
            
        
    
    ksort($resources);
    return $resources;


还有新课:

class CategoryEcommerceCore extends ObjectModelCore 

public $category_id;
public $category_core_id;

public static $definition = array(
    'table' => "category_ecommerce",
    'primary' => 'category_id',
    'fields' => array(
        'category_core_id' => array('type' => self::TYPE_INT),
    )
);

protected $webserviceParameters = array();


Webservice 被正确覆盖。我的课程 WebserviceRequest 正在复制到 /覆盖/类/webservice/WebserviceRequest 但是当我安装我的模块时,类没有复制到 /override/classes/。

如何使用自己的逻辑添加新资源?我想添加与我的表相关的类别。

问候 马丁

【问题讨论】:

【参考方案1】:

一旦除了 Webkul 教程之外几乎没有关于 API 的内容......我尝试实现“Webkul's”教程,但也失败了。但是似乎最好使用hooks 而不是覆盖。我使用我的“逆向工程技能”来确定创建该 API 的方式,所以-o-o-o,看! :D

假设您有一个自定义 PrestaShop 1.7 模块。您的文件是mymodule.php,这里有几个步骤。

    这是一种安装方法,允许您在数据库中注册挂钩(您可以卸载并重新安装模块以执行此方法):
公共功能安装() 父::安装(); $this->registerHook('addWebserviceResources'); 返回真;
    添加钩子监听器:
公共函数 hookAddWebserviceResources($resources) $add_resources['test'] = [ '描述' => '测试', 'specific_management' => 真, ]; 返回 $add_resources;

specific_management 选项表明您将使用 WebsiteSpecificManagement 文件而不是数据库模型文件。

    创建名为 WebsiteSpecificManagementTest 的 WebsiteSpecificManagement 文件(测试 - 是您的端点的 CamelCased 名称)。您可以从/classes/webservice/WebserviceSpecificManagementSearch.php 获取此文件的骨架。删除所有内容,除了:

    设置对象输出 setWsObject getWsObject getObjectOutput setUrlSegment getUrlSegment getContent(应该返回$this->output;,仅此而已) 管理 - 你应该重写它以返回/处理你想要的数据。

    添加

include_once(_PS_MODULE_DIR_.'YOURMODULENAME/classes/WebserviceSpecificManagementTest.php');

到你的模块文件(还没有弄清楚如何自动包含)。

    转到/Backoffice/index.php?controller=AdminWebservice 并为您的应用程序设置新的“Auth”密钥,从权限列表中选择test 端点。记住钥匙。

    访问 /api/test?ws_key=YOUR_KEY_GENERATED_ON_STEP_4 并查看 XML 响应。

    &output_format=JSON 添加到您的 URL 以查看 JSON 格式的响应。 你必须在WebsiteSpecificManagementTestmanage 方法中使用$this->output = json_encode(['blah' => 'world']) 之类的东西。

【讨论】:

我的建议是,如果您想添加另一个端点,例如:custom_task,或者已经安装了模块但它还没有钩住它的第一次安装,那么最好卸载模块,并且然后再次安装它,以查看(添加)custom_task 端点到 Web 服务端点列表。

以上是关于PrestaShop 1.7 添加新资源和类的主要内容,如果未能解决你的问题,请参考以下文章

prestashop 1.7 新模块

在产品 Prestashop 1.7 中添加字段

在结帐 prestashop 1.7 中添加字段

如何在 prestashop 1.7 中向 cms 页面添加挂钩

如何在 prestashop 1.7 中添加 Mobile_Detect.php?

Prestashop 1.7在管理产品页面上添加自定义字段