Никак не могу добавить свойства в .tpl

Автор murd0c, 15 января 2015, 01:55:20

« назад - далее »

murd0c

Ребят, у меня есть товар и у него есть свойства (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....} ?

Mr.Sen


Adik

На странице товара вот так.
{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.

murd0c

#3
Цитата: Adik от 15 января 2015, 13:14:47
На странице товара вот так.
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.
не много не понял последнее, можно подробнее?

murd0c


tigran


murd0c

а для productcomments? я имею ввиду во всплывающем окошке, в том которое открывается, когда жмешь на кнопку "оставить комментарий". Так просто вставить какой либо код у меня не получается..

PrestaMan

Чтобы этот код работал в модуле productcomments, нужно в файле productcomments.php добавить переменную features
$smarty->assign("features",$features);
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

murd0c

Цитата: PrestaMan от 16 января 2015, 11:08:17
Чтобы этот код работал в модуле productcomments, нужно в файле productcomments.php добавить переменную features
$smarty->assign("features",$features);
в продукткомментс .PHP ? ничего не понимаю.. разъясните пожалуйста по подробнее дилетанту!) Большое спасибо!
Дело еще в том что тплка которая мне нужна в темах а пхп с другими файлами в модулях

PrestaMan

Чтобы вывести свойства товара в модуле комментариев, нужно определить переменную, которая отвечает за свойства, в контроллере этого модуля, как переменную smarty.
В файле productcomments.php определены все переменные которые вы можете использовать в этом модуле.
Fundamentals of PrestaShop Development
Нельзя просто скопировать код из одного шаблона и перенести его в другой шаблон.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

murd0c

никак не могу понять что куда, расскажите кто нибудь делатьно пожалуйста

Adik

В модуле можно использовать только те переменные, что вы определите для шаблона этого модуля. То что модуль запускается на странице товара не дает ему прав на доступ ко всем переменным этой страницы. Это сделано для безопасности. В модуле комментариев не определены свойства товара, поэтому вы не можете их использовать. Поэтому вам нужно добавить:
1. В productcomments.php
- переменную для шаблона
$this->context->smarty->...
- вывод этой переменной в админке;
- сохранение этой переменной в бд.
2. В шаблон productcomments.tpl
- вывод этой переменной
3. В контоллер default.php
- проверку и сохранение этой переменной.

murd0c

Правильно ли я делаю?
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}


где нагрешил? Спасибо, что уделяете внимание!)

murd0c

Цитата: Adik от 22 января 2015, 14:31:51
В модуле можно использовать только те переменные, что вы определите для шаблона этого модуля. То что модуль запускается на странице товара не дает ему прав на доступ ко всем переменным этой страницы. Это сделано для безопасности. В модуле комментариев не определены свойства товара, поэтому вы не можете их использовать. Поэтому вам нужно добавить:
1. В productcomments.php
- переменную для шаблона
$this->context->smarty->...
- вывод этой переменной в админке;
- сохранение этой переменной в бд.
2. В шаблон productcomments.tpl
- вывод этой переменной
3. В контоллер default.php
- проверку и сохранение этой переменной.
а это вообще не понял как делать

tigran

$smarty->assign("features",$features);
Добавлять нужно во внутрь хука hookDisplay...

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