私は、Craft Commerce Commerce_ProductModel
からすべての製品を取得するAPIを構築しています。ここでは、Element APIプラグインを使用して構築しています。私はCraft
2の最新バージョンを実行しています。
私はこれまでJSON APIを構築しており、以下のコードで必要なものを返しています:
'api/allproducts' => [
'elementType' => 'Commerce_Product',
'criteria' => [
'search' => buildSearchQuery(craft()->request->getParam('types'))
],
'transformer' => function(Commerce_ProductModel $product) {
$mergedProductData = [];
$title = $product->title;
$url = UrlHelper::getUrl($product->url);
$brand = (string)$product->productBrand[0];
$designer = (string)$product->productDesigner[0];
$num_decimals = (intval($product->defaultVariant->price) == $product->defaultVariant->price) ? 0 :2;
$price = number_format($product->defaultVariant->price,$num_decimals);
$frontImage = $product->productImages[0];
$frontImages = [];
if ($frontImage)
{
craft()->config->set('generateTransformsBeforePageLoad', true);
if (craft()->plugins->getPlugin('Imager'))
{
$transformedImages = craft()->imager->transformImage(
$frontImage,
array(
array(
'width' => 1170,
),
array(
'width' => 780,
'jpegQuality' => 65,
),
array(
'width' => 390,
'jpegQuality' => 65,
),
),
array(
'ratio' => 16/9,
'position' => 'bottom-right',
'jpegQuality' => 80,
),
array(
'fillTransforms' => true,
)
);
$frontImages[] = craft()->imager->srcset($transformedImages);
} else {
$frontImages[] = $frontImage->getUrl(['width' => 390, 'height' => 294]);
}
}
$mergedProductData[] = [
'id' => $product->id,
'title' => $title,
'productImage' => $frontImages,
'body' => (string) $product->body,
'brand' => $brand,
'designer' => $designer,
'url' => $url
];
return [
'title' => $title,
'id' => $product->id,
'frontImage' => $frontImages,
'type' => $product->type->name,
'designer' => $designer,
'brand' => $brand,
'price' => $price,
'url' => $url,
'isInWishlist' => craft()->like->isLike($product->id),
'quickViewJson' => $mergedProductData
];
},
],
これは素晴らしいもので、私が必要としているものは何も返すことはありませんが、
Commerce_ProductModel
という製品タイプを探し出し、それを把握することで検索値を返そうとしています。
私が理想的にしたいのは、次のようなURLクエリを実行することです:
/api/allproducts?types[]=New&types[]=Tables
上記のコードでは、上のURLのようなクエリを作成できる別の開発者から与えられたこの関数があります。
buildSearchQuery(craft()->request->getParam('types'))
これで、Craft
Commerceの製品タイプ
を照会できるようにしたいので、これらのタイプの製品のみを返します。この機能は以下の通りです:
function buildSearchQuery($input) {
$query = "";
$i = 0;
foreach ($input as $value) {
if($i > 0) {
$query .= " OR ";
}
$query .= "title:*$value* OR body:*$value*";
$i++;
}
return $query;
}
どのようにしてこれをやり遂げることができるのか誰にも分かりますか?
商品は、商品タイプ type
(ハンドルまたはProductTypeModel)またはタイプIDで
typeId
によって照会できます。
テンプレートの場合、次のようになります。
craft.commerce.products.typeId([1,3,4]).find()
または
craft.commerce.products.type(['new','another']).find()
This is as per the parameter value syntax: https://craftcms.com/docs/templating/elementcriteriamodel#parameter-value-syntax
したがって、PHPの要素基準クエリ構文では、次のようになります。
'criteria' => [
'type' => ['New','Another']
],
または
'criteria' => [
'typeId' => [1,2]
],
または
'criteria' => [
'type' => craft()->commerce_productTypes->getAllProductTypes()[0]
],
The example you can was to build a query string fまたは the search
element criteria param, which could optionally be another criteria
if you wanted.