Если Вам нужно диалоговое окно, то Вам проще всего реализовать всё на основе рекомендованных товаров как это сделано при редактировании товара. А именно как у объекта \Catalog\Model\Orm\Product (файл /modules/catalog/model/orm/product.inc.php).
'recommended' => new Type\Varchar(array(
'maxLength' => 4000,
'description' => t('Рекомендуемые товары'),
'visible' => false,
)),
'recommended_arr' => new Type\ArrayList(array(
'visible' => false
)),
t('Рекомендуемые товары'),
'_recomended_' => new Type\UserTemplate(
'%catalog%/form/product/recomended.tpl',
'%catalog%/form/product/merecomended.tpl',array(
'meVisible' => true //Видимость при мультиредактировании
)),
Вот здесь 3 поля. Два скрытых. И одно, которое отвечает за отображение всей вкладки. Это происходит за счёт того, что используется тип поля UserTemplate. Если вы его используете, то оно распрастраняется полностью на ближайшую вкладку. В данном случае рекомендованные товары.
Первое поле служит для хранения массива товаров или каталогов выбранных в сериализованном виде, а вот второе содержит уже рассериализованный массив, чтобы было удобно с ним работать. Когда товар загружается из базы при его инициализации поле первое рассериализовывается и передаётся
значение во второе.
/**
* Вызывается после загрузки объекта
* @return void
*/
function afterObjectLoad()
{
if (!empty($this['recommended'])) {
$this['recommended_arr'] = @unserialize($this['recommended']);
}
}
Вам нужно будет использовать хук orm.afterload.catalog-product.
При сохранении товара, поле recommended_arr сохраняет сериализованный массив в recommended.
/**
* Вызывается перед сохранением объекта
*
* @param string $flag - строковое представление текущей операции (insert или update)
* @return void
*/
function beforeWrite($flag)
{
if ($this->isModified('recommended_arr')){ //Если изменялись рекомендуемые
$this['recommended'] = serialize($this['recommended_arr']);
}
}
На вкладке отрабатывает шаблон '%catalog%/form/product/recomended.tpl'. %catalog% - путь к папке шаблоном модуля catalog (/modules/catalog/view/). Там вызывается функция getProductDialog, которая принадлежит объекту товара. Она же и выводит нужную Вам кнопку.
Однако эта функция использует поля для рекомендуемых товаров, соответсвенно Вам нужно сделать будет свою функцию просто скопировав и заменив нужное и расширить объект товара, чтобы он видел уже Вашу другую функцию для отображания. Это можно сделать через
.
https://www.youtube.com/watch?v=7jsv06V … mp;index=4