Мне удалась создать дополнительную таблицу в таблице продуктов prestashop через api для webservice , однако ссылка api http://127.0.0.1/prestashop/api/wb3d/1 wb3d – это новая таблица, которую я создал в веб-сервис . Которая содержит путь к каталогу изображений где-то в Интернете. Эта ссылка при открытии показывает данные, которые были сохранены в базе данных, как показано на следующем изображении ниже
model – это имя каталога в Интернете, поэтому этот api (wb3d) был связан с таблицей продуктов в webservice с ссылкой: http://127.0.0.1/prestashop/api/products/1, когда я открываю эту ссылку. Запись ассоциации показана, но данные не отображаются ** см. Ниже изображение **
Выделенная область показывает таблицу wb3d, связанную с таблицей продуктов, через точку api webservice. Я не могу связать данные истории wb3d с данными таблицы продуктов. Поэтому я могу использовать его в других устройствах через webservice
Это то, что я пробовал до сих пор
<?php class ProductMergeCore extends ObjectModel { public $product_id; public $id_wb3d; public $directory_name; public static $definition = array( 'table' => 'wb3d', 'primary' => 'id_wb3d', 'fields' => array( 'id_wb3d' => array('type' => self::TYPE_INT, 'required' => true), 'product_id' => array('type' => self::TYPE_INT, 'required' => true), 'directory_name' => array('type' => self::TYPE_STRING, 'required' =>false, 'size' => 64), ), ); protected $webserviceParameters = array(); } ?>
productmerge.php отвечает за создание ассоциированной таблицы в таблице продуктов.
<?php Class Product extends ProductCore { public $extrafield; public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null) { $this->webserviceParameters['associations']['wb3d'] = array('resource' => 'wb3d','fields' => array('directory_name' => array('required' => true))); parent::__construct($id_product, $full, $id_lang, $id_shop, $context); } } ?>
В этом продукте.php, который предназначен для переопределения класса продукта для передачи дополнительных параметров через webserviceparameters (), а затем вызова родительского конструктора класса продукта
<?php class WebserviceRequest extends WebserviceRequestCore { public static function getResources() { $resources=parent::getResources(); $resources['wb3d'] = array('description' => 'images path', 'class' => 'ProductMerge'); ksort($resources); return $resources; } } ?>
Класс WebserviceRequest.php является классом переопределения для класса WebserviceRequest, который показывает описание записи в таблице в webservice
Это файлы, которые необходимы для того, чтобы все было сделано. То, что я пытаюсь достичь, – это связанная таблица (wb3d), данные должны быть доступны в таблице продуктов через вызов aps webservice rest api .
если вы хотите добавить другую таблицу webservice в качестве вашей связи с вашим продуктом, вы можете посмотреть, как ассоциации выполняются в категории.php, находящемся в prestashop / classes .
'associations' => array( 'categories' => array('getter' => 'getChildrenWs', 'resource' => 'category', ) )
как вы видите, есть параметр с именем getter, который получает значение из getChildrenWs, которое является методом в category.php, который извлекает данные из базы данных.
поэтому в вашем случае: в Product.php
$this->webserviceParameters['associations']['wb3d'] = array('resource' => 'wb3d', 'getter' => 'yourMethodName', 'fields' => array('directory_name' => array('required' => true));
и создайте метод с именем ' yourMethodName ' в Product.php
public function yourMethodName() { //copy the getChildrenWs method which is in Category.php and alter it to ur needs }