PrestaShop 1.7添加新资源和课程

时间:2017-11-06 09:07:27

标签: php prestashop prestashop-1.6 prestashop-1.7

我使用以下代码创建了新资源:

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类正在复制到 /超驰/类/ web服务/ WebserviceRequest 但是当我安装我的模块时,班级并没有复制到/ override / classes /。

如何使用自己的逻辑添加新的资源?我想在我的表格中添加类别。

此致 马丁

1 个答案:

答案 0 :(得分:2)

除了Webkul教程之外,没有任何关于API的内容......我试图实现“Webkul”教程,但也失败了。但是,似乎最好使用hooks而不是覆盖。我使用我的“逆向工程技能”来确定创建API的方法,所以-O-o-o,BEHOLD! :d

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

  1. 这是一个安装方法,允许您在数据库中注册挂钩(您可以卸载并重新安装模块以执行此方法):
  2. public function install() {
    
        parent::install();
        $this->registerHook('addWebserviceResources');
        return true;
    }
    
    1. 添加钩子侦听器:
    2. public function hookAddWebserviceResources($resources) {
      
          $added_resources['test'] = [
              'description' => 'Test',
              'specific_management' => true,
          ];
          return $added_resources;
      }
      

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

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

        • setObjectOutput
        • setWsObject
        • getWsObject
        • getObjectOutput
        • setUrlSegment
        • getUrlSegment
        • getContent(应该返回$this->output;,仅此而已)
        • manage - 您应该重写它以返回/处理您想要的数据。
      2. 添加

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

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

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

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

        3. &output_format=JSON添加到您的网址,以查看JSON中的回复。 您必须在$this->output = json_encode(['blah' => 'world'])的{​​{1}}方法中使用manage之类的内容。