Поиск по артикулу модификации [Решено]
Добрый день:)
При добавлении артикулов к модификациям в msOptionsPrice2, поиска по ним в админке в таблице minishop2, да и через msearch2 на сайте не происходит, можно ли как-то это настроить?
При добавлении артикулов к модификациям в msOptionsPrice2, поиска по ним в админке в таблице minishop2, да и через msearch2 на сайте не происходит, можно ли как-то это настроить?
Комментарии: 3
Было решено написанием плагина, сохраняющим артикулы модификаций в аннотацию при сохранении товара.
$eventName = $modx->event->name;
switch($eventName) {
case 'OnDocFormSave':
$modpar = array(
'rid' => $id
);
$mod = $modx->getCollection('msopModification', $modpar);
$datamod = array();
if ($mod){
foreach ($mod as $v){
$qi = ['mid' => $v->get('id')];
$opt = $modx->getObject('msopModificationOption', $qi);
$val = '';
if ($opt){
$val .= $v->get('article');
}
$datamod[] = $val;
$intro = implode(",", $datamod);
};
$res = $modx->getObject('modResource', $id);
$res->set('introtext', $intro);
$res->save();
}
break;
}
Для обновления существующих товаров:if(!$docs = $modx->getCollection('modResource', array(
'template' => 7
))){return;}
foreach($docs as $doc){
$q = $doc->get('id');
$modpar = array(
'rid' => $q
);
$mod = $modx->getCollection('msopModification', $modpar);
$datamod = array();
if ($mod){
foreach ($mod as $v){
$qi = ['mid' => $v->get('id')];
$opt = $this->modx->getObject('msopModificationOption', $qi);
$val = '';
if ($opt){
$val .= $v->get('article');
}
$datamod[] = $val;
$intro = implode(",", $datamod);
};
$doc->set('introtext',$intro);
$doc->save();
}
}
Еще как вариант, можно писать их а алиас.
Думаю стоить дополнить этот пост раз он есть в поиске. Во-первых на мой взгляд решение не самое лучшее, но достаточно простое, поэтому я его немного переделал для компактности
ПЛАГИН
ПЛАГИН
<?php
switch ($modx->event->name) {
case 'OnDocFormSave':
$sql = 'SELECT article FROM modx_msop_modifications WHERE rid= ?';
$statement = $modx->prepare($sql);
if ( $statement->execute(array($id)) ) {
$result = $statement->fetchAll(PDO::FETCH_COLUMN);
}
$resource->set('introtext', implode(',',$result));
$resource->save();
break;
}
КОД ДЛЯ КОСОЛИ, чтобы обновить товары<?php
$resources = $modx->getIterator('msProduct');
foreach ($resources as $resource) {
$id = $resource->get('id');
$sql = 'SELECT article FROM modx_msop_modifications WHERE rid= ?';
$statement = $modx->prepare($sql);
if ( $statement->execute(array($id)) ) {
$result = $statement->fetchAll(PDO::FETCH_COLUMN);
}
$resource->set('introtext', implode(',',$result));
$resource->save();
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.