Автор Тема: Помогите добавить навую кнопку в displayHomeTab  (Прочитано 683 раз)

08 Август 2016, 18:53:44
  • Новичок
  • *
  • Сообщений: 15
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Уважаемые эксперты, прошу подсказать как добавить вывод "Избранного" в указанный хук?
Имеется вывод 3-х модулей под баннером на главной http://joxi.ru/Q2KYPpZt9jD4Jr
В хуках они же прикручены http://joxi.ru/p279N5Yt0Beozr

На сколько понимаю "Избранные" есть выбранная категория, как в "Рекомендуемых" или поправьте меня, если я не прав.
И, получается, нужно как-то добавить еще один модуль "Рекомендуемые" только выбрать другую категорию?

Как это сделать - ума не приложу....

Будьте добры ткните носом, а то я уже и гугл замучил но не нашел...
08 Август 2016, 19:05:20
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
"Избранные" - это ты про модуль blockbestsellers?
08 Август 2016, 19:14:37
Ответ #2
  • Новичок
  • *
  • Сообщений: 15
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
"Избранные" - это ты про модуль blockbestsellers?

Нет, на скрине они есть - Лдеры продаж...
А нужно еще добавить вывод одной каегории - чтобы кнопка появилась и соответствующий блок с выводом 8 (или сколько там надо будет штук)
как уже выведены "новинки" "лидеры продаж" и "рекомендуемые"...
Пробовал клонировать homefeatured, но модуль как был 1 так и остался...

08 Август 2016, 20:31:18
Ответ #3
  • Фрилансер
  • *
  • Сообщений: 104
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля

что бы добавить к списку ссылок используйте hookDisplayHomeTab
что бы добавить содержимое hookDisplayHomeTabContent


Из Ваших слов не понятно что означает "нужно еще добавить вывод одной каегории".
(* --[[ /* <!-- {* #  -- ; *} --> */ ]] *)
skype: -
08 Август 2016, 20:56:12
Ответ #4
  • Новичок
  • *
  • Сообщений: 15
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Не целеком выразил мысль, вот и не понятно... извиняюсь, но голова за весь день уже пухнет.

Значит есть как на скрине - http://joxi.ru/Q2KYPpZt9jD4Jr - выводятся новые,  популярные и бестселлеры  соответственно Новые товары, Рекомендованные и Лидеры продаж

Рекомендованные выводят 8 наименований из категории id2
А мне нужно чтобы была еще одна ссылка "Эксклюзивно" - еще один вывод выбранной категории, но с другим id.

Можно же продукт занести в 2 категории? и некоторым товарам задать принадлежность к 2-м категориям и категорию "Эксклюзивно" добавить 4 кнопкой... ну и хуками в Tab и TabContent

Надеюсь осилил донести мысль...
08 Август 2016, 21:49:15
Ответ #5
  • Фрилансер
  • *
  • Сообщений: 104
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Просто скопировать модуль homefeatured не выход.
Я вижу следующие пути решения:
1. Скопировать и переписать модуль homefeatured;

2. Написать новый модуль "homeExclusive"  http://doc.prestashop.com/display/PS16/Creating+a+first+module и добавить хуки hookDisplayHomeTab и hookDisplayHomeTabContent в homeExclusive.php
 в hookDisplayHomeTab просто отобразить tpl с примерным содержанием:
<li><a data-toggle="tab" href="#homeExclusive" class="homeExclusive">{l s='Exclusive' mod='homeExclusive'}</a></li> в hookDisplayHomeTabContent
$lang_id = (int)Context::getContext()->language->id;
$category = new Category(777, $lang_id); // 777 - желаемая категория "эксклюзива"
$products = $category->getProducts($lang_id, 1, 8, 'position'); // 1 - номер страницы (оставить таким же), 8 - количество продуктов на страницу, 'position' - сортировка по позиции в категории
$this->smarty->assign(
   array(
      'products' => $products,
      'homeSize' => Image::getSize(ImageType::getFormatedName('home')), //размер изображения, оставить таким же
   )
);
return $this->display(__FILE__, 'homeExclusive.tpl');
homeExclusive.tpl по образу homefeatured.tpl

3.втупую править index.tpl :o
(* --[[ /* <!-- {* #  -- ; *} --> */ ]] *)
skype: -
08 Август 2016, 21:58:56
Ответ #6
  • Новичок
  • *
  • Сообщений: 15
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Просто скопировать модуль homefeatured не выход.


Ну я нашел статейку как модуль "клонировать", ток не прокатило...
Сейчас почитаю - мож осилю...
Спасибо большое
08 Август 2016, 22:04:55
Ответ #7
  • Фрилансер
  • *
  • Сообщений: 104
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Раз осилили статейку как клонировать модуль, попробуйте написать свой, ничего сложного нету, много статей на русском. А основной код я написал.
(* --[[ /* <!-- {* #  -- ; *} --> */ ]] *)
skype: -
08 Август 2016, 22:09:07
Ответ #8
  • Новичок
  • *
  • Сообщений: 15
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Уже читаю по вашей ссылке - мож и английский свой подтяну. а то некогда языками заниматься, а так и интересно и полезно...
Хотя не исключено, что плюну и на русском буду поискать... :)
Еще раз, спасибо
09 Август 2016, 07:48:55
Ответ #9
  • Новичок
  • *
  • Сообщений: 15
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Насилил... :(

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

Написал модуль, но преста на него ругается
Цитировать
Ошибок: 2

    exclusive (разбор ошибки в /modules/exclusive/exclusive.php),
    exclusive (класс отсутствует в /modules/exclusive/exclusive.php)

В exclusive.php следующее:
<?php
/* 
* 2016 Exebeche
* First Module
* Free to use
*/
if (!defined('_PS_VERSION_'))
exit;

class 
Exclusive extends Module
{
public function __construct()
{
$this->name 'exclusive';
$this->tab 'front_office_features';
$this->version '1.0.0';
$this->author 'Alexandr Stepanov';
$this->need_instance 0;
$this->ps_version_compliancy =  array('min' => '1.6''max' => _PS_VERSION_ );
$this->bootstrap true;

parent::__construct();

$this->displayName $this->l('Exclusive');
$this->description $this->l('Модуль для эксклюзива на StoreFG');

$this->confirmUninstall $this->l('Уверены, что хотите удалить данный модуль?');

if (!Configuration::get('EXCLUSIVE_NAME'))
$this->warning $this->l('No name provided');
}
public function install()
{
if (Shop::isFeatureActive())
Shop::setContext(Shop::CONTEXT_ALL);
if (!parent::install() ||
!$this->registerHook('displayHomeTab') ||
!$this->registerHook('displayHomeTabContent') ||
!Configuration::updateValue('EXCLUSIVE_NAME''my friend')
)
return false;
return true;
}
$lang_id = (int)Context::getContext()->language->id;
$category = new Category(1$lang_id); // 777 - желаемая категория "эксклюзива"
$products $category->getProducts($lang_id18'position'); // 1 - номер страницы (оставить таким же), 8 - количество продуктов на страницу, 'position' - сортировка по позиции в категории
$this->smarty->assign(
array(
'products' => $products,
'homeSize' => Image::getSize(ImageType::getFormatedName('home')), //размер изображения, оставить таким же
)
);
return $this->display(__FILE__'Exclusive.tpl');
}

В Exclusive.tpl иизменил содержимое homefeatured.tpl
{if isset($products) && $products}
{include file="$tpl_dir./product-list.tpl" class='exclusive tab-pane' id='exclusive'}
{else}
<ul id="exclusive" class="exclusive tab-pane">
<li class="alert alert-info">{l s='No featured products at this time.' mod='exclusive'}</li>
</ul>
{/if}

Где я что не туда?

И еще не допетрал как
Цитировать
tpl с содержимым: <li><a data-toggle="tab" href="#homeExclusive" class="homeExclusive">{l s='Exclusive' mod='homeExclusive'}</a></li>
вставить в хук?
09 Август 2016, 10:38:17
Ответ #10
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В классе class Exclusive должны быть методы
install(){}
uninstall(){}
hookГдеНужноВыводить($params){}

http://doc.prestashop.com/display/PS16/Displaying+content+on+the+front+office
09 Август 2016, 10:47:21
Ответ #11
  • Фрилансер
  • *
  • Сообщений: 104
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Не используйте название модулей с общими фразами, "Exclusive" плохой вариант, возможно в базе аддонов Preatashop уже есть модуль с таким же названием, лучше - "AlexExclusive", "homeExclusive" и .т.д.
Нужно что бы название модуля, папки, основного файла php и класса совпадали. AlexExclusive/AlexExclusive.php с классом
class AlexExclusive extends Module.

>Не совсем понял зачем новые хуки создавать, если мне в имеющиеся нужно разместить?
Вы не создаете хуки, а размещаете шаблоны в определенные хуки (места, если так можно выразится), или по другому, hook это крюк на который вы подцепляете свой шаблон с выводом данных.
"!$this->registerHook('displayHomeTab') ||" это как раз и попытка зарегистрироваться в хуке displayHomeTab.

В функции install():
return false;
return true;
вы промахнулись с "return false;" переместите в if.

Работа с переменной EXCLUSIVE_NAME лишняя удалите строки с Configuration::get('EXCLUSIVE_NAME') и Configuration::updateValue('EXCLUSIVE_NAME', 'my friend').

public function hookDisplayHomeTab($params)
{
    return $this->display(__FILE__, 'AlexExclusive_tab.tpl');
}


public function hookDisplayHomeTabContent($params)
{
    $lang_id = (int)Context::getContext()->language->id;
    $category = new Category(777, $lang_id); // 777 - желаемая категория "эксклюзива"
    $products = $category->getProducts($lang_id, 1, 8, 'position'); // 1 - номер страницы (оставить таким же), 8 - количество продуктов на страницу, 'position' - сортировка по позиции в категории
    $this->smarty->assign(
        array(
            'products' => $products,
            'homeSize' => Image::getSize(ImageType::getFormatedName('home')), //размер изображения, оставить таким же
        )
    );
    return $this->display(__FILE__, 'AlexExclusive_content.tpl');
}

в AlexExclusive_tab.tpl
<li><a data-toggle="tab" href="#AlexExclusive" id="AlexExclusive_tab">{l s='Exclusive' mod='AlexExclusive'}</a></li>
в AlexExclusive_content.tpl
{if isset($products) && $products}
   {include file="$tpl_dir./product-list.tpl" class='tab-pane' id='AlexExclusive_content'}
{else}
<ul id="AlexExclusive_content" class="tab-pane">
   <li class="alert alert-info">{l s='No exclusive products at this time.' mod='AlexExclusive'}</li>
</ul>
{/if}
(* --[[ /* <!-- {* #  -- ; *} --> */ ]] *)
skype: -