Jump to content

[РЕШЕНО] Срочно нужен модуль или помощь в том как реализовать


Recommended Posts

classes/Product.php -> getRandomSpecial

$id_product = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);

на

//$id_product = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);

 

ниже

$row=
...
WHERE p.id_product = '.(int)$id_product);

на

WHERE p.id_product IN ('.implode(', ', $ids_product).');

ниже

getProductProperties
на
getProductsProperties

 

ну и в шаблоне будь готов принять массив.

Link to comment
Share on other sites

Хакнутый метод вернет массив, ищи по названию метода где он используется. В blockspecials.php найдешь код:

global $smarty;
 if (!$special = Product::getRandomSpecial((int)($params['cookie']->id_lang)) AND !Configuration::get('PS_BLOCK_SPECIALS_DISPLAY'))
  return;
 $smarty->assign(array(
  'special' => $special,
  'priceWithoutReduction_tax_excl' => Tools::ps_round($special['price_without_reduction'], 2),
  'mediumSize' => Image::getSize('medium')
 ));

Переменная {special} хранит в себе массив товаров по спец ценам.

Link to comment
Share on other sites

о, Серый уже)

да, чтобы было проще можешь вывести на страницу себе массив этот, добавь в blockspecials.php

 

if (!$special = Product::getRandomSpecial((int)($params['cookie']->id_lang)) AND !Configuration::get('PS_BLOCK_SPECIALS_DISPLAY'))
return;
// эту строку
var_export($special);

 

и далее по аналогии с бестселлерами действуй

<dl>
 {foreach from=$best_sellers item=product name=myLoop}
  <dt class="{if $smarty.foreach.myLoop.first}first_item{elseif $smarty.foreach.myLoop.last}last_item{else}item{/if}"><a href="{$product.link}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|strip_tags:'UTF-8'|escape:'htmlall':'UTF-8'}</a></dt>
 {/foreach}
 </dl>

 

{foreach from=$best_sellers item=product name=myLoop}

from=$special

item= пофиг, оставь продукт

name=тоже пофиг,это чтобы к свойствам обращаться, можешь оставить как есть

Link to comment
Share on other sites

Тут ошибка какая то, точно все правильно написано? редактор показывает по крайней мере одну ошибку что верхняя запятая где то пропущена:

 

WHERE p.id_product IN ('.implode(', ', $ids_product).');

Link to comment
Share on other sites

Как я понял там еще нужно убрать после закомментированной строчки (//$id_product = Db::getInstance...) вот это:

 

 if (!$id_product)
  return false;

 

Но по прежнему непонятки с:

WHERE p.id_product IN ('.implode(', ', $ids_product).');

Edited by Kerm (see edit history)
Link to comment
Share on other sites

 $row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
 SELECT p.*, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, p.`ean13`,  p.`upc`,
  i.`id_image`, il.`legend`, t.`rate`
 FROM `'._DB_PREFIX_.'product` p
 LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)($id_lang).')
 LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1)
 LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)($id_lang).')
 LEFT JOIN `'._DB_PREFIX_.'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group`
		 AND tr.`id_country` = '.(int)Country::getDefaultCountryId().'
		 AND tr.`id_state` = 0)
 LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`)
 WHERE p.id_product IN ('.implode(', ', $ids_product).')';

 

п.с. и да

 if (!$id_product)
  return false;

надо убрать, я пропустил

Edited by SergeyH (see edit history)
Link to comment
Share on other sites

Вставляю твою строчку и получаю ошибку на сайте:

 

Parse error: syntax error, unexpected ';' in /var/www/user/data/www/site.ru/classes/Product.php on line 1482

 

Вот там такой код:

 

 $row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
 SELECT p.*, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, p.`ean13`,  p.`upc`,
  i.`id_image`, il.`legend`, t.`rate`
 FROM `'._DB_PREFIX_.'product` p
 LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)($id_lang).')
 LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1)
 LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)($id_lang).')
 LEFT JOIN `'._DB_PREFIX_.'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group`
		 AND tr.`id_country` = '.(int)Country::getDefaultCountryId().'
		 AND tr.`id_state` = 0)
 LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`)
 WHERE p.id_product = '.(int)$id_product);

Edited by Kerm (see edit history)
Link to comment
Share on other sites

Вот как с твоим примером у меня выгледит кусок кода:

 

 ORDER BY RAND()';
 //$id_product = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
 //if (!$id_product)
 //return false;
 $row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
 SELECT p.*, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, p.`ean13`,  p.`upc`,
  i.`id_image`, il.`legend`, t.`rate`
 FROM `'._DB_PREFIX_.'product` p
 LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)($id_lang).')
 LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1)
 LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)($id_lang).')
 LEFT JOIN `'._DB_PREFIX_.'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group`
		 AND tr.`id_country` = '.(int)Country::getDefaultCountryId().'
		 AND tr.`id_state` = 0)
 LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`)
 WHERE p.id_product IN ('.implode(', ', $ids_product).')';
 return Product::getProductsProperties($id_lang, $row);
}

Link to comment
Share on other sites

Помогло вот это:

WHERE p.id_product IN ('.implode(', ', $ids_product).')');

 

Скобку еще в конце поставил...

 

Страница стала отображаться, но опять с ошибками:

 

Notice: Uninitialized string offset: 0 in /var/www/user/data/www/site.ru/classes/Product.php on line 2682
Notice: Undefined index: price_without_reduction in /var/www/user/data/www/site.ru/modules/blockspecials/blockspecials.php on line 112
Новинки

 

На 2682 находится:

 

 if (!$row['id_product'])
  return false;

 

Но если закомментировать то еще больше ошибок вылазиет..

Edited by Kerm (see edit history)
Link to comment
Share on other sites

В общем мне не удается вывести цену товара(

 

Так же заметил что в блоке выводится больше товаров чем есть на самом деле...например у меня сейчас в магазине 9 товаров, а в этом блоке их 20!

 

Проблему с ценой можно решить используя этот код:

 

{if $product.show_price AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE}<span class="price">{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}</span>{/if}

 

Но мне нужно чтобы цена именно со скидкой выводилась!

 

 

Пробовал вот так:

 

 {if $special.specific_prices}
	   {assign var='specific_prices' value=$special.specific_prices}
	   {if $specific_prices.reduction_type == 'percentage' && ($specific_prices.from == $specific_prices.to OR ($smarty.now|date_format:'%Y-%m-%d %H:%M:%S' <= $specific_prices.to && $smarty.now|date_format:'%Y-%m-%d %H:%M:%S' >= $specific_prices.from))}
	    <span class="price">(-{$specific_prices.reduction*100|floatval}%)</span>
		  {/if}
		 {/if}

 

Т.е. как в оригинальном файле, в результате получаю:

 

Notice: Undefined index: price_without_reduction in /var/www/user/data/www/site.ru/modules/blockspecials/blockspecials.php on line 111
и
Notice:  Undefined index: specific_prices in /var/www/user/data/www/site.ru/tools/smarty/compile/ebff801aaae5a8ec66d6efb86f9bf390c69732f6.file.blockspecials-shoo.tpl.php  on line 52

Edited by Kerm (see edit history)
Link to comment
Share on other sites

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

Link to comment
Share on other sites

А цена у тебя когда ты это делал была со скидкой там или обычная?

 

Блин только что заметил что эти 20 товаров, в место 9, это один и тот же товар...

Edited by Kerm (see edit history)
Link to comment
Share on other sites

Нашел возможное решение http://www.prestashop.com/forums/topic/20501-how-do-i-add-more-than-1-special-in-the-blockspecials-module/page__hl__blockspecials__st__20 днем попробую...

 

Блин зачем они туда рендом засунули, вернее почему не сделали в админке переключение с рендома на не рендом и выбор кол-во товаров выводить((

Link to comment
Share on other sites

Гррррр

 

Notice: Undefined variable: special in /var/www/user/data/www/site.ru/modules/blockspecials/blockspecials.php on line 110
Notice: Undefined variable: specials in /var/www/user/data/www/site.ru/tools/smarty/sysplugins/smarty_internal_data.php on line 291

Edited by Kerm (see edit history)
Link to comment
Share on other sites

Нашел готовый модуль!!!

 

Пашет на 1.4.8.3!!!

 

Настраивается через админку!!!

а там случаем нет модуля новинок и лидеры продаж в центре?

Edited by gabdr (see edit history)
Link to comment
Share on other sites

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

Edited by Kerm (see edit history)
Link to comment
Share on other sites

×
×
  • Create New...