*

Qznec

Вот вроде набросал побыстрячку
(Здесь есть изображение, скрытое от гостей. Для просмотра зарегистрируйтесь или залогиньтесь)

в файле \includes\modules\boxes\manufacturer_info.php начало функции initialize() должно выглядеть так:

    function initialize() {
      global $osC_Database, $osC_Language, $osC_Product;

      if (isset($osC_Product) && is_a($osC_Product, 'osC_Product')) {
$Qattribute = $osC_Database->query('select pa.value from :table_product_attributes pa, :table_templates_boxes tb where tb.code = :code and tb.modules_group = :modules_group and tb.id = pa.id and products_id = :products_id');
        $Qattribute->bindTable(':table_product_attributes', TABLE_PRODUCT_ATTRIBUTES);
        $Qattribute->bindTable(':table_templates_boxes', TABLE_TEMPLATES_BOXES);
        $Qattribute->bindValue(':code', 'manufacturers');
        $Qattribute->bindValue(':modules_group', 'product_attributes');
        $Qattribute->bindInt(':products_id', $osC_Product->getID());
        $Qattribute->execute();

        $Qmanufacturer = $osC_Database->query('select m.manufacturers_id, m.manufacturers_name, m.manufacturers_image, mi.manufacturers_url from :table_manufacturers m left join :table_manufacturers_info mi on (m.manufacturers_id = mi.manufacturers_id and mi.languages_id = :languages_id), :table_products p  where p.products_id = :products_id and m.manufacturers_id = :manufacturers_id');
        $Qmanufacturer->bindTable(':table_manufacturers', TABLE_MANUFACTURERS);
        $Qmanufacturer->bindTable(':table_manufacturers_info', TABLE_MANUFACTURERS_INFO);
        $Qmanufacturer->bindTable(':table_products', TABLE_PRODUCTS);
        $Qmanufacturer->bindInt(':languages_id', $osC_Language->getID());
        $Qmanufacturer->bindInt(':products_id', $osC_Product->getID());
$Qmanufacturer->bindInt(':manufacturers_id', $Qattribute->valueInt('value'));
        $Qmanufacturer->execute();

        if ($Qmanufacturer->numberOfRows()) {
          $this->_content = '';
          ........................
Тем самым мы избавляемся от получения значения id производителя из таблицы products.
Код не оптимизирован. Возможно стОит еще над ним поколдовать
(Здесь есть изображение, скрытое от гостей. Для просмотра зарегистрируйтесь или залогиньтесь)

*

Qznec

Посмотрел по всему движку, откуда берется идентификатор производителя.
В некоторых случаях из таблицы products, в некоторых - из product_attributes.
какую часть запросов изменять не понятно... 
(Здесь есть изображение, скрытое от гостей. Для просмотра зарегистрируйтесь или залогиньтесь)

Решил все-таки дописать "костыль", чтоб при сохранении товара производитель записывался в обе таблице.
Для этого нужно в файле /admin/includes/applications/products/classes/products.php код после 380-й строки привести к такому виду:

      if ( $error === false ) {
        if ( isset($data['attributes']) && !empty($data['attributes']) ) {
  $Qattribute_manufacturer = $osC_Database->query('select tb.id from :table_templates_boxes tb where tb.code = :code and tb.modules_group = :modules_group');
  $Qattribute_manufacturer->bindTable(':table_templates_boxes', TABLE_TEMPLATES_BOXES);
          $Qattribute_manufacturer->bindValue(':code', 'manufacturers');
          $Qattribute_manufacturer->bindValue(':modules_group', 'product_attributes');
  $Qattribute_manufacturer->execute();
          foreach ( $data['attributes'] as $attributes_id => $value ) { 
            if ( is_array($value) ) {
            } elseif ( !empty($value) ) {
              if ($attributes_id = $Qattribute_manufacturer->valueInt('id')) {
                $Qmanufacturers_id = $osC_Database->query('update :table_products set manufacturers_id = :manufacturers_id where products_id = :products_id');
                $Qmanufacturers_id->bindTable(':table_products', TABLE_PRODUCTS);
                $Qmanufacturers_id->bindInt(':manufacturers_id', $value);
                $Qmanufacturers_id->bindInt(':products_id', $products_id);
                $Qmanufacturers_id->execute();
              }
              $Qcheck = $osC_Database->query('select id from :table_product_attributes where products_id = :products_id and id = :id limit 1');
              ...................................

У меня все работает... Не знаю чего ты говоришь что так не будет работать... Ты попробуй мой код... Все пашет на отлично... Зачем вносить еще в одну таблицу это значение? Проясни на что это повлияет?

*

Qznec

Работает, пока у товара один атрибут.

Попробуй добавить "Дата поступления товара" ))

Такс... Интересно... Это я не просмотрел... Как я понял твой код идет в дополнение к моему? Или это такой отдельный? Ты его проверил уже? Тебе пора давать еще одну звезду на доске почета на моем сайте... Там у тебя уже есть награды) Глянь)

Тут теперь не один костыль, а два получается - можно нормально ходить)))

*

Qznec

Мой код можно внести в "чистую" версию....
он просто при создании/редактировании товара заносит производителя в обе таблицы... по идее, все будет работать
(Здесь есть изображение, скрытое от гостей. Для просмотра зарегистрируйтесь или залогиньтесь)

по логике - это не правильно и производитель должен храниться в одном месте, но нужно определиться где именно...
либо в товаре, либо в атрибутах!

Тут такой код, что он часть из одного места берет, а часть из другого. И менять пока нельзя принцип... А вдруг когда выйдет полная версия года через 2-3, то эти поля будут нужны именно как сделано... Поэтому лучше костыли чем переделка...

*

Qznec

Там у тебя уже есть награды) Глянь)
пасибко 
(Здесь есть изображение, скрытое от гостей. Для просмотра зарегистрируйтесь или залогиньтесь)

Я не вижу чтобы твой код вносил id_manufacturers в таблицу products.... Он же у тебя только в атрибуты вносит.... Его надо тогда в паре с моим...

*

Qznec

$Qmanufacturers_id = $osC_Database->query('update :table_products set manufacturers_id = :manufacturers_id where products_id = :products_id');в двух словах - при переборе массива атрибутов товара я сравниваю id атрибута с id производителя из templates_boxes
если совпадают, обновляю в продуктсах производителя

Этот код вносит в таблицу производителей.... А не в таблицу товаров...

Update: блин... Не заметил... Ты прав...

Проверю и отпишусь...

*

Qznec

угу... и проверь, что получается при копировании товара, плз... а то я в методе copy() не колупался еще - некогда было 
(Здесь есть изображение, скрытое от гостей. Для просмотра зарегистрируйтесь или залогиньтесь)

*

Qznec

Ха-ха-ха... 
(Здесь есть изображение, скрытое от гостей. Для просмотра зарегистрируйтесь или залогиньтесь)

Если деинсталлировать модуль "Производители", то атрибут "Производитель" товаров удаляется из product_attributes, а из products нет
(Здесь есть изображение, скрытое от гостей. Для просмотра зарегистрируйтесь или залогиньтесь)

В итоге, для существующих товаров сортировка по производителю не работает, но бокс для сортировки со списком производителей появляется. А бокс "Информация о производителе" показывает производителя товара, но на самой странице товара производитель не указан
(Здесь есть изображение, скрытое от гостей. Для просмотра зарегистрируйтесь или залогиньтесь)

похоже, что костыли не помогут ))))
Наверное, надо переносить производителя полностью в атрибуты!