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

не верная ссылка в cross_selling.html


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

Добрый день.

 

в /templates/template/module/cross_selling.html есть метка:

{$products_data.PRODUCTS_BUTTON_BUY_NOW}

 

в результате, на сайте (в блоке реком.след.товары) ссылка получается вот такая:

http://site.com/seo-path?action=buy_now

 

это при включенной аякс-корзине и на товар у которого есть атрибуты.

 

а должно быть так:

http://site.com/seo-path?action=buy_now&BUYproducts_id=9999

 

как должно быть и чтоб работало посмотрел на главной странице, там всё ок.

 

на главной используется шаблон /templates/template/module/new_products_default.html, но метка у него другая:

{$module_data.PRODUCTS_BUTTON_BUY_NOW}

 

 

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

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

Добавьте на vamshop.ru/forum/tracker/

Так сразу вряд ли исправление будет.

 

Там вроде есть проблема с получением id номера товара.

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

Запостил: http://vamshop.ru/forum/tracker/issue-132-неверная-ссылка-на-карточку-товара/

 

Да, я тоже думал, что проблема с получением id товара, т.к. в ф. которая рисует кнопку "Купить" getBuyNowButton передаются всего 2 аргумента ID и NAME. Хоть getBuyNowButton и использует ф. vam_href_link, но аргументы передаются ей одни и те же, что при включенной аякс-корзине, что при выключенной (и что имеет товар атрибуты, что не имеет), за исключением параметра onclick. То есть сам href для тега A должен быть один и тот же, в принципе так оно и работает в new_products_default.

 

Подскажите, пожалуйста, куда копать чтобы пофиксить? (уж очень хочется по-скорее решить эту проблему) :(

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

Да вроде пытались исправить эту ошибку, но пока не получилось.

Попробуем ещё раз.

 

Но как я говорил, сразу не получится, придётся ждать.

 

Сопутствующие достаются из /includes/classes/product.php

В методе getCrossSell вроде так.

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

Блин. Я костыльных дел мастер.. Ну, не знаю я как лучше для системы сделать багфикс. Но в проблеме я разобрался и сейчас расскажу в чём заковырка.

 

Но сперва мой костылёк:

 

В includes/classes/product.php в функции (далее сокр. "ф.") getBuyNowButton($id, $name), после:

global $PHP_SELF;

добавляем:

$vam_get_all_get_params_return = (basename($PHP_SELF) == 'product_info.php') ? preg_replace('/products_id=\d+&/', '', vam_get_all_get_params(array ('action'))) : vam_get_all_get_params(array ('action'));

теперь немножко изменим переменную $link, меняем:

		if (AJAX_CART == 'true' && !vam_has_product_attributes($id)) {
		$link = '<a href="'.vam_href_link(basename($PHP_SELF), 'action=buy_now&BUYproducts_id='.$id.'&'.vam_get_all_get_params(array ('action')), 'NONSSL').'" onclick="doBuyNow(\''.$id.'\',\'1\'); return false;">'.vam_image('templates/'.CURRENT_TEMPLATE.'/buttons/' . $_SESSION['language'] . '/button_buy_now.png', TEXT_BUY.$name.TEXT_NOW).'</a>';
		} else {
		$link = '<a href="'.vam_href_link(basename($PHP_SELF), 'action=buy_now&BUYproducts_id='.$id.'&'.vam_get_all_get_params(array ('action')), 'NONSSL').'">'.vam_image('templates/'.CURRENT_TEMPLATE.'/buttons/' . $_SESSION['language'] . '/button_buy_now.png', TEXT_BUY.$name.TEXT_NOW).'</a>';
		}

на это:

		if (AJAX_CART == 'true' && !vam_has_product_attributes($id)) {
		$link = '<a href="'.vam_href_link(basename($PHP_SELF), 'action=buy_now&BUYproducts_id='.$id.'&'.$vam_get_all_get_params_return, 'NONSSL').'" onclick="doBuyNow(\''.$id.'\',\'1\'); return false;">'.vam_image('templates/'.CURRENT_TEMPLATE.'/buttons/' . $_SESSION['language'] . '/button_buy_now.png', TEXT_BUY.$name.TEXT_NOW).'</a>';
		} else {
		$link = '<a href="'.vam_href_link(basename($PHP_SELF), 'action=buy_now&BUYproducts_id='.$id.'&'.$vam_get_all_get_params_return, 'NONSSL').'">'.vam_image('templates/'.CURRENT_TEMPLATE.'/buttons/' . $_SESSION['language'] . '/button_buy_now.png', TEXT_BUY.$name.TEXT_NOW).'</a>';
		}

 

То есть мы просто заменили vam_get_all_get_params(array ('action')) на переменную $vam_get_all_get_params_return, которую выше этого условия создали.

 

Теперь поясню в чём же проблема

 

Всё просто.

 

Например в cross_selling.html кнопка "Купить" рисуется след. вызовом: {$products_data.PRODUCTS_BUTTON_BUY_NOW}.

 

Эти данные шаблонизатор берёт из файла: includes/classes/product.php из ф. buildDataArray(&$array,$image='thumbnail')

 

Ф. buildDataArray(&$array,$image='thumbnail') вызывает ф. $this->getBuyNowButton($array['products_id'], $array['products_name'])

 

Ф. getBuyNowButton($id, $name) для формирования атрибута href для тега <A> вызывает ф. vam_href_link, передавая ей разные необходимые аргументы.

 

Среди передаваемых аргументов, один из них формируется вызовом ф. vam_get_all_get_params(array ('action')) из файла /inc/vam_get_all_params.inc.php

 

Так вот, этот вызов возвращает строку: "products_id=9999&", (9999 - id товара), которая, напомню, передается ф. vam_href_link. Если последняя ф. принимает такой стринг, то она в конечном счёте не добавляет строку &BUYproducts_id=9999 в атрибут href тега A.

 

Ничего удивительного в том, что ф. vam_get_all_get_params(array ('action')) возвращает нам products_id нет, т.к. она вызывается на карточке товара, данная функция черпает информацию из суперглобального массива $_GET, а там products_id просто обязан быть, иначе мы не сможем узнать какой товар мы должны отобразить на странице.

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