Автор Тема: Никак не могу добавить свойства в .tpl  (Прочитано 694 раз)

15 Января 2015, 01:55:20
  • Фрилансер
  • *
  • Сообщений: 220
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Ребят, у меня есть товар и у него есть свойства (features) мне надо его вставить в комментарии-туда, когда нажимаешь на кнопку оставить свои коментарии вместо короткого описания ({$product->description_short}) ! как мне это сделать?? вот кусок из того куда вставить
[tt] <div class="product clearfix">
<img src="{$link->getImageLink($product->link_rewrite, $productcomment_cover, 'home_default')|escape:'html'}" height="{$homeSize.height}" width="{$homeSize.width}" alt="{$product->name|escape:html:'UTF-8'}" />
<div class="product_desc">
<p class="product_name"><strong>{$product->name}</strong></p>
{$product->description_short}

</div>
</div>[/tt]

и вот как у меня записанны те самые featurs свойства 
[tt]<ul>
{foreach from=$features item=feature}
            {if isset($feature.value)}
    <li><strong><span>{$feature.name|escape:'htmlall':'UTF-8'}</span></strong> {$feature.value|escape:'htmlall':'UTF-8'}</li>
            {/if}
{/foreach}
</ul>[/tt]
но в другой тплке, может можно написать что то типо {$feature....} ?
15 Января 2015, 10:08:34
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 1190
  • Репутация: +28/-1
  • Сообщество PrestaShop
    • Просмотр профиля
15 Января 2015, 13:14:47
Ответ #2
  • Ветеран
  • *****
  • Сообщений: 13126
  • Репутация: +14553/-0
  • Сообщество PrestaShop
    • Просмотр профиля
На странице товара вот так.
{if isset($features) && $features}
<!-- product's features -->
<ul id="idTab2" class="bullet">
{foreach from=$features item=feature}
                {if isset($feature.value)}
<li><span>{$feature.name|escape:'htmlall':'UTF-8'}</span> {$feature.value|escape:'htmlall':'UTF-8'}</li>
                {/if}
{/foreach}
</ul>
{/if}

На страницах заказа нужно определить переменную smarty features в контроллере OrderController.
15 Января 2015, 18:37:58
Ответ #3
  • Фрилансер
  • *
  • Сообщений: 220
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
На странице товара вот так.
public function hookProductTabContent($params)
{
$this->context->controller->addJS($this->_path.'js/jquery.rating.pack.js');
$this->context->controller->addJS($this->_path.'js/jquery.textareaCounter.plugin.js');
$this->context->controller->addJS($this->_path.'js/productcomments.js');

$id_guest = (!$id_customer = (int)$this->context->cookie->id_customer) ? (int)$this->context->cookie->id_guest : false;
$customerComment = ProductComment::getByCustomer((int)(Tools::getValue('id_product')), (int)$this->context->cookie->id_customer, true, (int)$id_guest);

$averages = ProductComment::getAveragesByProduct((int)Tools::getValue('id_product'), $this->context->language->id);
$averageTotal = 0;
foreach ($averages as $average)
$averageTotal += (float)($average);
$averageTotal = count($averages) ? ($averageTotal / count($averages)) : 0;

$image = Product::getCover((int)Tools::getValue('id_product'));

$this->context->smarty->assign(array(
'logged' => $this->context->customer->isLogged(true),
'action_url' => '',
'comments' => ProductComment::getByProduct((int)Tools::getValue('id_product'), 1, null, $this->context->cookie->id_customer),
'criterions' => ProductCommentCriterion::getByProduct((int)Tools::getValue('id_product'), $this->context->language->id),
'averages' => $averages,
'product_comment_path' => $this->_path,
'averageTotal' => $averageTotal,
'allow_guests' => (int)Configuration::get('PRODUCT_COMMENTS_ALLOW_GUESTS'),
'too_early' => ($customerComment && (strtotime($customerComment['date_add']) + Configuration::get('PRODUCT_COMMENTS_MINIMAL_TIME')) > time()),
'delay' => Configuration::get('PRODUCT_COMMENTS_MINIMAL_TIME'),
'id_product_comment_form' => (int)Tools::getValue('id_product'),
'secure_key' => $this->secure_key,
'productcomment_cover' => (int)Tools::getValue('id_product').'-'.(int)$image['id_image'],
'mediumSize' => Image::getSize(ImageType::getFormatedName('medium')),
'nbComments' => (int)ProductComment::getCommentNumber((int)Tools::getValue('id_product')),
'productcomments_controller_url' => $this->context->link->getModuleLink('productcomments'),
'productcomments_url_rewriting_activated' => Configuration::get('PS_REWRITING_SETTINGS', 0),
'moderation_active' => (int)Configuration::get('PRODUCT_COMMENTS_MODERATE'),
'features' => $product->getFrontFeatures($this->context->language->id)

   ));

На страницах заказа нужно определить переменную smarty features в контроллере OrderController.
не много не понял последнее, можно подробнее?
15 Января 2015, 18:40:59
Ответ #4
  • Фрилансер
  • *
  • Сообщений: 220
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
15 Января 2015, 21:04:20
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 1010
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
15 Января 2015, 21:41:17
Ответ #6
  • Фрилансер
  • *
  • Сообщений: 220
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
а для productcomments? я имею ввиду во всплывающем окошке, в том которое открывается, когда жмешь на кнопку "оставить комментарий". Так просто вставить какой либо код у меня не получается..
16 Января 2015, 11:08:17
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 20837
  • Репутация: +25276/-0
  • Prestashop - просто и эффективно
    • Просмотр профиля
Чтобы этот код работал в модуле productcomments, нужно в файле productcomments.php добавить переменную features
$smarty->assign("features",$features);
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
16 Января 2015, 17:55:18
Ответ #8
  • Фрилансер
  • *
  • Сообщений: 220
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Чтобы этот код работал в модуле productcomments, нужно в файле productcomments.php добавить переменную features
$smarty->assign("features",$features);
в продукткомментс .PHP ? ничего не понимаю.. разъясните пожалуйста по подробнее дилетанту!) Большое спасибо!
Дело еще в том что тплка которая мне нужна в темах а пхп с другими файлами в модулях
16 Января 2015, 18:02:41
Ответ #9
  • Ветеран
  • *****
  • Сообщений: 20837
  • Репутация: +25276/-0
  • Prestashop - просто и эффективно
    • Просмотр профиля
Чтобы вывести свойства товара в модуле комментариев, нужно определить переменную, которая отвечает за свойства, в контроллере этого модуля, как переменную smarty.
В файле productcomments.php определены все переменные которые вы можете использовать в этом модуле.
Fundamentals of PrestaShop Development
Нельзя просто скопировать код из одного шаблона и перенести его в другой шаблон.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
22 Января 2015, 14:18:37
Ответ #10
  • Фрилансер
  • *
  • Сообщений: 220
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
никак не могу понять что куда, расскажите кто нибудь делатьно пожалуйста
22 Января 2015, 14:31:51
Ответ #11
  • Ветеран
  • *****
  • Сообщений: 13126
  • Репутация: +14553/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В модуле можно использовать только те переменные, что вы определите для шаблона этого модуля. То что модуль запускается на странице товара не дает ему прав на доступ ко всем переменным этой страницы. Это сделано для безопасности. В модуле комментариев не определены свойства товара, поэтому вы не можете их использовать. Поэтому вам нужно добавить:
1. В productcomments.php
- переменную для шаблона
$this->context->smarty->...- вывод этой переменной в админке;
- сохранение этой переменной в бд.
2. В шаблон productcomments.tpl
- вывод этой переменной
3. В контоллер default.php
- проверку и сохранение этой переменной.
23 Января 2015, 18:26:41
Ответ #12
  • Фрилансер
  • *
  • Сообщений: 220
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Правильно ли я делаю?
1. открываю productcomentS.php , вставляю код    $smarty->assign("features",$features); в любое место -- вот первая проблема- куда бы ни вставил, загружаю на сайт и белый экран
2. затем захожу в темы, продукткоментс о ткрываю единственный файл там тплку(почему именно в темах-модулях? потому что пробовал изменить название продукта и в тпл которая в модулях и в тпл которая в темах, меняется только в темах(по этому решил что за внешний вид этого окошка отвечает именно эта тплка))
и загружаю в ней в нужное место (в фанси бокс) текст, то есть

 было так:    <div style="display: none;">
<div id="new_comment_form">
<form id="id_new_comment_form" action="#">
<h2 class="title">Напишите Свой Отзыв</h2>
{if isset($product) && $product}
<div class="product clearfix">
<img src="{$link->getImageLink($product->link_rewrite, $productcomment_cover, 'home_default')|escape:'html'}" height="{$homeSize.height}" width="{$homeSize.width}" alt="{$product->name|escape:html:'UTF-8'}" />
<div class="product_desc">
<p class="product_name"><strong>{$product->name}</strong></p>




{$product->description_short}
</div>
</div>
{/if}

А стало так:

<!-- Fancybox -->
<div style="display: none;">
<div id="new_comment_form">
<form id="id_new_comment_form" action="#">
<h2 class="title">Напишите Свой Отзыв</h2>
{if isset($product) && $product}
<div class="product clearfix">
<img src="{$link->getImageLink($product->link_rewrite, $productcomment_cover, 'home_default')|escape:'html'}" height="{$homeSize.height}" width="{$homeSize.width}" alt="{$product->name|escape:html:'UTF-8'}" />
<div class="product_desc">
<p class="product_name"><strong>{$product->name}</strong></p>



{if isset($features) && $features}
<!-- product's features -->
<ul>
$smarty->assign("features",$features);
{foreach from=$features item=feature}
                {if isset($feature.value)}
<li><span>{$feature.name|escape:'htmlall':'UTF-8'}</span> {$feature.value|escape:'htmlall':'UTF-8'}</li>
                {/if}
{/foreach}
</ul>
{/if}

</div>
</div>
{/if}


где нагрешил? Спасибо, что уделяете внимание!)
23 Января 2015, 18:37:26
Ответ #13
  • Фрилансер
  • *
  • Сообщений: 220
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В модуле можно использовать только те переменные, что вы определите для шаблона этого модуля. То что модуль запускается на странице товара не дает ему прав на доступ ко всем переменным этой страницы. Это сделано для безопасности. В модуле комментариев не определены свойства товара, поэтому вы не можете их использовать. Поэтому вам нужно добавить:
1. В productcomments.php
- переменную для шаблона
$this->context->smarty->...- вывод этой переменной в админке;
- сохранение этой переменной в бд.
2. В шаблон productcomments.tpl
- вывод этой переменной
3. В контоллер default.php
- проверку и сохранение этой переменной.
а это вообще не понял как делать
23 Января 2015, 20:45:42
Ответ #14
  • Ветеран
  • *****
  • Сообщений: 1010
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
$smarty->assign("features",$features);Добавлять нужно во внутрь хука hookDisplay...

Цитировать
А стало так:
...
$smarty->assign("features",$features);
Нельзя этот код использовать в шаблоне TPL. Это ошибка.