Jump to content

Recommended Posts

Существует такое понятие как перелинковка. Перелинковка служит для внутренней оптимизации сайта под поисковые системы. Для того чтобы была перелинковка - необходимо чтобы на странице товара были ссылки на следующий и предыдущий товар в категории. На сколько я понял в престе это позволяет сделать модуль дополнительных товаров.

 

ВОПРОС:

Как изменить вывод этого модуля, по умолчанию этот модуль выводит на странице любого товара из категории одни и те же товары из категории, а надо чтобы он выводил к примеру 5 предыдущих и 5 следующих товаров.

Если кто что нибудь знает - помогите!!!

Link to comment
Share on other sites

вообще перелинковка нужна чтобы распределять "вес" на нужные страницы, это не обязательно страницы товаров.

 

по модулю - там надо менять запрос к БД, насколько помню там "свой" запрос используется, в обход стандартных.

Link to comment
Share on other sites

Ну к примеру у меня в категории 322 товаров http://karman.org.ua/906540-bolgarki-ushm - это болгарки вес распределить мне необходимо равномерно для каждой страницы товара. А сейчас получается, что странице любого товара отображаются только 10 конкретных товаров из этих 322. Получается неравномерное распределение веса, основной вес получают только 10 этих товаров, а нужно чтобы было всё равномерно.

Link to comment
Share on other sites

Как поменять запрос к базе данных. Логики запроса вообще не могу понять. У меня 322 товара в категории. С ИД от 4691 по 5012. На странице любого товара выводятся только товары с следующими ИД - 4867, 4868, 4869, 4870, 4871, 4863, 4862, 4854, 4855, 4856 - где здесь логика?

Для примера взял вот эти товары:

http://karman.org.ua/bolgarki-ushm/4860-uglovaja-shlifmashina-sturm-ag9512e.html - ИД 4860

http://karman.org.ua/bolgarki-ushm/4979-uglovaja-shlifmashina-zenit-zush-125950.html - ИД 4979

А хотелось бы, что бы для товара с ИД 4860 в дополнительных товарах отображалась следующая последовательность

4855, 4856, 4857, 4858, 4859, 4861, 4862, 4863, 4864, 4865

Link to comment
Share on other sites

Получается неравномерное распределение веса, основной вес получают только 10 этих товаров

 

да все верно, я всего лишь хотел сказать что перелинковка может выполнять разные задачи. Если добавить ссылки на другие товары по какому-то критерию, то вес распределится еще и на них. Если же стоит задача именно выделить какие-то страницы - то надо убрать раздачу веса с остальных и сосредоточить на "товарах" например. Конкретная реализация зависит от конкретных задач.

 

Заглянул в модуль, в самом модуле получить то что ты хочешь - нельзя, надо изменять/дополнять методы ядра

Link to comment
Share on other sites

Просто поменять запрос в модуле не получиться, нужно написать небольшой свой, взяв за основу функцию getProducts из класса products.

Sql запрос чтобы вытащить нужные товары будет выглядеть так

WHERE `id_product` > "id_текущего продукта"
AND `id_category_default` = "id_категории_текущего продукта" LIMIT 5

Link to comment
Share on other sites

Не правильно, в sql оператор "<>" означает - "не равно" , и соответственно выведет он Вам первые по нумерации товары id которых не равно текущему товару

 

правильнее и проще использовать два запроса

WHERE `id_product` > "id_текущего продукта"

WHERE `id_product` < "id_текущего продукта"

Link to comment
Share on other sites

точно, не учел, тогда как-то так, правильный синтаксис не помню, но идея ясна

WHERE `id_product` > "id_текущего продукта" - 5 AND `id_product` < "id_текущего продукта" + 5 AND `id_product` <> "id_текущего продукта"

Link to comment
Share on other sites

Думаю это то же неверно, лучше уж тогда использовать оператор "between", но и при этом учитывайте что могут быть провалы в нумерации, например 4855, 4856, 4858, 4859, 4860 где 4857 товара нет, он может быть просто удален.

Link to comment
Share on other sites

  • 2 weeks later...

Ребята, если кому надо, вот нашёл хороший модуль, который добавляет на страницу товара ссылки на следующий и предыдущий товар - это как раз то, что я и искал.

http://www.prestashop.com/forums/topic/52315-module-next-and-previous-links-on-the-product-page/

Link to comment
Share on other sites

Ребята, если кому надо, вот нашёл хороший модуль, который добавляет на страницу товара ссылки на следующий и предыдущий товар - это как раз то, что я и искал.

http://www.prestasho...e-product-page/

 

что самое смешное я когда-то искал этот мод, и мне даже кто-то ссылку нарыл. Чето я не сообразил его сюда запостить)

Link to comment
Share on other sites

Если вдруг какие вопросы пишите, я уже немного с ним разобрался помогу чем смогу.

 

Здравствуй. При переходе на следующий товар появляется "[Debug] This page has moved

Please use the following URL instead: http://www.site.ua/товар", а url страницы товара выглядит - site.ua/категория/товар.

Link to comment
Share on other sites

Разобрался с модулем дополнительные товары.

Сначала получаем массив отсортированный по айди продукта

$categoryProducts = $category->getProducts((int)($cookie->id_lang), 1, 1000, 'id_product'); /* 1000 products max. */

 

Потом в цикл который ищет товар в массиве по ид, чтобы его удалить из этого массива, добавил ещё цикл, который считает количество товаров которые идут в массиве до этого ид

 

// Remove current product from the list

if (is_array($categoryProducts) AND sizeof($categoryProducts))

{

foreach ($categoryProducts AS $key => $categoryProduct)

if ($categoryProduct['id_product'] == $idProduct)

{

unset($categoryProducts[$key]);

break;

}

elseif ($categoryProduct['id_product'] != $idProduct)

{

$i++;

}

Остальное всё можно закоментировать, до цикла

который обрезает лишние товары для вывода, в котором надо заменить $middlePosition на переменную $i.

 

if ($sizeOfCategoryProducts > 10)

{

$categoryProducts = array_slice($categoryProducts, $i - 5, 10, true);

}

}

Link to comment
Share on other sites

Только ещё не разобрался с выводом для крайних элементов. Сейчас получается что для крайнего элемента будет отображаться только 5 товаров которые идут перед ним, а после него, т.е. те товары которые в начале массива не показывает. Такая же ситуация и с первым товаром показывает не правильно. Ну это надо разобраться с массивами.

Link to comment
Share on other sites

Без цикла нельзя на нём всё и завязано.

Возьмём к примеру вот этот товар

http://karman.org.ua/gazonokosilki/4230-gazonokosilka-benzinovaja-sadko-glm-43.html

ID его 4230, т.е. должно быть 10 товаров с следующими id

4225, 4226,4227,4228,4229,4231,4232,4233,4234,4235

Заходим и проверяем. Так оно и есть.

Смотрим вот єту строчку

$categoryProducts = array_slice($categoryProducts, $middlePosition - 5, 10, true);

В массиве 110 товаров с ид от 4203 по 4312.

Она берёт и из массива который отсортирован по id и делает следующее.

Исходя из описания функции http://php.su/functions/?array-slice

от 110 делает смещение к началу на 27-5=22 и выводит 10 товаров, но нашего товара нет в этой последовательности, так как его из массива выкинула, вот эта функция

unset($categoryProducts[$key]);

Если убрать цикл, как я смогу передать array_slice на сколько надо будет делать смещение.

Link to comment
Share on other sites

А вот к примеру для 5-ти последних и 5-ти первых товаров в категории работает этот способ не совсем правильно.

Для товара последнего в категории с ид 4312

http://karman.org.ua...j-46-s-bx-.html

будут отображены товары

4307.4308,4309,4310,4311, а 5-ти следующих товаров нет

Так как из условия

$categoryProducts = array_slice($categoryProducts, $middlePosition - 5, 10, true);

$categoryProducts = array_slice(110, 110 - 5, 10, true);

получается что надо вывести 10 товаров начиная с 105 товара, оно так и выводит 5 последних товаров в массиве, а надо ещё и 5 первых, а array_slice не позволяет это сделать, может есть какой-то другой способ вытащить из массива 10 товаров даже если достигается конец массива, чтобы брались значения из начала массива.

Link to comment
Share on other sites

А вот к примеру для 5-ти последних и 5-ти первых товаров в категории работает этот способ не совсем правильно.

 

все же мне кажется много там надумано) пример выводит +/-3 эл-та независимо от позиции эл-та

$prodID = array('a','b','c','d','e','f','g','h','s');
$count = count($prodID);
$key = 7;
for ($index = $key-3; $index < $key+4; $index++) {
if ($index<$count) echo $prodID[$index],' - ';
else echo $prodID[$index-$count],' - ';
}
/*
* $key - индекс текущего эл-та
* выдача:
* e - f - g - h - s - a - b -
*/

 

п.с.

ID его 4230, т.е. должно быть 10 товаров с следующими id

неверно, там выше уже обсуждали, айди могут идти не по порядку, пропущены и т.д. +-5 товаров - речь о индексах массива, а не о айди товара

Link to comment
Share on other sites

×
×
  • Create New...