Перейти к содержанию
Форум поддержки пользователей VamShop

product_listing и extrafields, VamShop дополнительные поля в листинге т


Рекомендуемые сообщения

Столкнулся с такой проблемой. В ВамШопе есть дополнительные поля (extrafields) Но лажа в том что отображаются они только в product_info, а product_listing игнорируют. Единственное что нарыл по этому поводу в нете:http://vamshop-forum.ru/index.php@action=printpage%3Btopic=317.0.php

Дальше попробовал следующее

Вставляемый код в includes/modules/product_listing.php беру из

includes/modules/product_info.php и меняю $info->assign на

$module->assign вот собственно он:

$extra_fields_query = vamDBquery("
                     SELECT pef.products_extra_fields_status as status, pef.products_extra_fields_name as name, ptf.products_extra_fields_value as value
                     FROM ". TABLE_PRODUCTS_EXTRA_FIELDS ." pef
            LEFT JOIN  ". TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS ." ptf
           ON ptf.products_extra_fields_id=pef.products_extra_fields_id
           WHERE ptf.products_id=". $product->data['products_id'] ." and ptf.products_extra_fields_value<>'' and (pef.languages_id='0' or pef.languages_id='".$_SESSION['languages_id']."')
           ORDER BY products_extra_fields_order");

 while ($extra_fields = vam_db_fetch_array($extra_fields_query,true)) {
       if (! $extra_fields['status'])  // show only enabled extra field
          continue;
 
 $extra_fields_data[] = array (
 'NAME' => $extra_fields['name'],
 'VALUE' => $extra_fields['value']
 );
 
 }


 $module->assign('extra_fields_data', $extra_fields_data);[/code] Вставляю между $module->assign('MANUFACTURER_SORT', $manufacturer_sort); и $module->assign('language', $_SESSION['language']); Ну а в продукт листинг соответственно вставляю метки extrafields. Вот что пишет:
[code]11/12/2009 10:12:56 | 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'and ptf.products_extra_fields_value<>'' and (pef.languages_id='0' or pef.languag' at line 5 |
                     SELECT pef.products_extra_fields_status as status, pef.products_extra_fields_name as name, ptf.products_extra_fields_value as value
                     FROM products_extra_fields pef
            LEFT JOIN  products_to_products_extra_fields ptf
           ON ptf.products_extra_fields_id=pef.products_extra_fields_id
           WHERE ptf.products_id= and ptf.products_extra_fields_value<>'' and (pef.languages_id='0' or pef.languages_id='1')
           ORDER BY products_extra_fields_order | /index.php/cat/c162_Seify-ognestoikie.html
Методом научного тыка пришел вот к чему: Вставляем код:  
   $extra_fields_query = vamDBquery("
                     SELECT pef.products_extra_fields_status as status, pef.products_extra_fields_name as name, ptf.products_extra_fields_value as value
                     FROM ". TABLE_PRODUCTS_EXTRA_FIELDS ." pef
            LEFT JOIN  ". TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS ." ptf
           ON ptf.products_extra_fields_id=pef.products_extra_fields_id
WHERE ptf.products_id IN (".implode(", ", $c_id).") and ptf.products_extra_fields_value<>'' and (pef.languages_id='0' or pef.languages_id='".$_SESSION['languages_id']."')
           ORDER BY products_extra_fields_order");
 while ($extra_fields = vam_db_fetch_array($extra_fields_query,true)) {
       if (! $extra_fields['status'])  // show only enabled extra field
          continue;
 $extra_fields_data[] = array (
 'NAME' => $extra_fields['name'],
 'VALUE' => $extra_fields['value']
 );
 }
 $module->assign('extra_fields_data', $extra_fields_data);
[/code] Между
[code]    // no product found
   $result = false;

}
И
// get default template
if ($category['listing_template'] == '' or $category['listing_template'] == 'default') {[/code] В файл /includes/modules/product_listing.php Получаем ошибку:
[code]15/12/2009 17:12:05 | 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') and ptf.products_extra_fields_value<>'' and (pef.languages_id='0' or pef.langu' at line 5 |
                     SELECT pef.products_extra_fields_status as status, pef.products_extra_fields_name as name, ptf.products_extra_fields_value as value
                     FROM products_extra_fields pef
            LEFT JOIN  products_to_products_extra_fields ptf
           ON ptf.products_extra_fields_id=pef.products_extra_fields_id
WHERE ptf.products_id IN () and ptf.products_extra_fields_value<>'' and (pef.languages_id='0' or pef.languages_id='1')
           ORDER BY products_extra_fields_order | /index.php/cat/c162_Seify-ognestoikie.html
Сносим нафиг строку
WHERE ptf.products_id IN (".implode(", ", $c_id).") and ptf.products_extra_fields_value<>'' and (pef.languages_id='0' or pef.languages_id='".$_SESSION['languages_id']."')

И видим что к КАЖДОМУ товару выводится ВЕСЬ список атрибутов из мускуля. Тоесть атрибуты всех товаров.

Нарыл ещё кой чего по теме http://www.vamshop-forum.ru/index.php@action=printpage;topic=3728.0.php

Народ, помогите, заказчик скоро загрызет.

Ссылка на сообщение
Поделиться на другие сайты

Dr.host

Если не против, перенёс в эту тему сообщение из - http://oscomm.biz/index.php?showtopic=17452

Есть решение, тему можно закрывать.

В файл /includes/modules/product_listing.php

Между

// no product found
$result = false;

}[/code] И
[code]// get default template
if ($category['listing_template'] == '' or $category['listing_template'] == 'default') {
Вписываем:
	$ids=array(-1);
if(is_array($module_content))foreach ($module_content as $k => $v) {
$ids[]=$v['PRODUCTS_ID'];
};
$ids=join(',', $ids);

  $extra_fields_query = vamDBquery("
  SELECT  ptf.products_id, pef.products_extra_fields_status as status, pef.products_extra_fields_name as name, ptf.products_extra_fields_value as value
  FROM ". TABLE_PRODUCTS_EXTRA_FIELDS ." pef
LEFT JOIN  ". TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS ." ptf
ON ptf.products_extra_fields_id=pef.products_extra_fields_id
WHERE ptf.products_id in (".$ids.") and ptf.products_extra_fields_value<>'' and (pef.languages_id='0' or pef.languages_id='".$_SESSION['languages_id']."')
ORDER BY products_extra_fields_order");

  while ($extra_fields = vam_db_fetch_array($extra_fields_query,true)) {
if (! $extra_fields['status'])  // show only enabled extra field
  continue;
 
  $extra_fields_data[$extra_fields['products_id']][] = array (
  'NAME' => $extra_fields['name'],
  'VALUE' => $extra_fields['value']
  );
if(is_array($module_content))foreach ($module_content as $k => $v) {
if($v['PRODUCTS_ID']==$extra_fields['products_id']){
$module_content[$k]['EXTRA_FIELDS'][]=
array (
  'NAME' => $extra_fields['name'],
  'VALUE' => $extra_fields['value']
);
}
}
  }[/code] В продукт листинг html вписываем
[code] {if $module_data.EXTRA_FIELDS}
{foreach name=aussen item=extra_fields from=$module_data.EXTRA_FIELDS}
{$extra_fields.NAME}: {$extra_fields.VALUE}<br />
{/foreach}
{/if}

В нужное нам место. И готово.

Ссылка на сообщение
Поделиться на другие сайты
×
×
  • Создать...