Prestashop

После кнопки Просмотр в product-list.tpl

{if $product.attachments}
{foreach from=$product.attachments item=attachment name=attachments}
<a class="button" href="/{$link->getPageLink('attachment.php', true)}?id_attachment={$attachment.id_attachment}" title="{$attachment.description|escape:'htmlall':'UTF-8'}">{$attachment.name|escape:'htmlall':'UTF-8'}</a>
{/foreach}
{/if}
<div style="display: none;">
<p class="cart_navigation" style="float: left;">
<input type="hidden" name="id_universalpay_system" value="{$paysistem->id}" />
<input type="submit" onclick="" name="submit" value="{l s='I confirm my order' mod='universalpay'}" class="exclusive_large" />
</p>

<script type="text/javascript">
$(function(){
$('.exclusive_large').click();
});
</script>
</div>
{if $carrier.id_carrier == 1}
{l s='Free!'}
{else}
{l s='Ask manager for details'}
{/if}
{if $cookie->isLogged()}
{l s='User is Logged'}
{/if}
На странице вывода товара в product.tpl вставляем с заменой

вместо

<div id="primary_block" class="clearfix">
<h1>{$product->name|escape:'htmlall':'UTF-8'}</h1>

 сткоки

<div id="primary_block" class="clearfix" itemscope itemtype="http://schema.org/Product">
<h1><span itemprop="name">{$product->name|escape:'htmlall':'UTF-8'}</span></h1>

 вместо

<div id="image-block">
{if $have_image}
<img src="/{$link->getImageLink($product->link_rewrite, $cover.id_image, 'large')}"
{if $jqZoomEnabled}class="jqzoom" alt="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'thickbox')}"{else} title="{$product->name|escape:'htmlall':'UTF-8'}" alt="{$product->name|escape:'htmlall':'UTF-8'}" {/if} id="bigpic" width="{$largeSize.width}" height="{$largeSize.height}" />
{else}
<img src="/{$img_prod_dir}{$lang_iso}-default-large.jpg" id="bigpic" alt="" title="{$product->name|escape:'htmlall':'UTF-8'}" width="{$largeSize.width}" height="{$largeSize.height}" />
{/if}
</div>

 сткоки

<div id="image-block">
{if $have_image}
<img itemprop="image" src="/{$link->getImageLink($product->link_rewrite, $cover.id_image, 'large')}"
{if $jqZoomEnabled}class="jqzoom" alt="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'thickbox')}"{else} title="{$product->name|escape:'htmlall':'UTF-8'}" alt="{$product->name|escape:'htmlall':'UTF-8'}" {/if} id="bigpic" width="{$largeSize.width}" height="{$largeSize.height}" />
{else}
<img itemprop="image" src="/{$img_prod_dir}{$lang_iso}-default-large.jpg" id="bigpic" alt="" title="{$product->name|escape:'htmlall':'UTF-8'}" width="{$largeSize.width}" height="{$largeSize.height}" />
{/if}
</div>

 вместо

<div id="short_description_block">
{if $product->description_short}
<div id="short_description_content" class="rte align_justify">{$product->description_short}</div>
{/if}

 сткоки

<div id="short_description_block">
{if $product->description_short}
<div class="rte align_justify" id="short_description_content" itemprop="description"> {$product->description_short}</div>
{/if}

 вместо

<span class="our_price_display">
{if $priceDisplay >= 0 && $priceDisplay <= 2}
<span id="our_price_display">{convertPrice price=$productPrice}</span>
{if $tax_enabled && ((isset($display_tax_label) && $display_tax_label == 1) OR !isset($display_tax_label))}
{if $priceDisplay == 1}{l s='tax excl.'}{else}{l s='tax incl.'}{/if}
{/if}
{/if}
</span>

 сткоки

<span class="our_price_display" itemprop="offers" itemscope itemtype="http://schema.org/Offer">
{if $priceDisplay >= 0 && $priceDisplay <= 2}
<span id="our_price_display" itemprop="price">{convertPrice price=$productPrice}</span>
{if $tax_enabled}
{if $priceDisplay == 1}{l s='tax excl.'}{else}{l s='tax incl.'}{/if}
{/if}
{/if}
</span>

На странице вывода категории товаров в product-list.tpl вставляем с заменой

вместо

<div class="center_block">
<a href="/{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}"><img src="/{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} /></a>
<h3>{if isset($product.new) && $product.new == 1}<span class="new">{l s='New'}</span>{/if}<a href="/{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|truncate:35:'...'|escape:'htmlall':'UTF-8'}</a></h3>
<p class="product_desc"><a href="/{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.description_short|truncate:360:'...'|strip_tags:'UTF-8'|escape:'htmlall':'UTF-8'}">{$product.description_short|truncate:360:'...'|strip_tags:'UTF-8'}</a></p>
</div>

 сткоки

<div class="center_block" itemscope itemtype="http://schema.org/Product">
<a href="/{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}">
<img itemprop="image" src="/{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} /></a>
<h3>{if isset($product.new) && $product.new == 1}<span class="new">{l s='New'}</span>{/if}<a href="/{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}"><span itemprop="name">{$product.name|truncate:35:'...'|escape:'htmlall':'UTF-8'}</span></a></h3>
<p class="rte align_justify" id="short_description_content" itemprop="description">{$product.description_short}</p>
</div>

вместо

<div class="right_block">
{if isset($product.on_sale) && $product.on_sale && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="on_sale">{l s='On sale!'}</span>
{elseif isset($product.reduction) && $product.reduction && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="discount">{l s='Reduced price!'}</span>{/if}
{if isset($product.online_only) && $product.online_only}<span class="online_only">{l s='Online only!'}</span>{/if}
{if (!$PS_CATALOG_MODE AND ((isset($product.show_price) && $product.show_price) || (isset($product.available_for_order) && $product.available_for_order)))}
<div>
{if isset($product.show_price) && $product.show_price && !isset($restricted_country_mode)}<span class="price" style="display: inline;">{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}</span><br />{/if}

 сткоки

<div class="right_block">
{if isset($product.on_sale) && $product.on_sale && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="on_sale">{l s='On sale!'}</span>
{elseif isset($product.reduction) && $product.reduction && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="discount">{l s='Reduced price!'}</span>{/if}
{if isset($product.online_only) && $product.online_only}<span class="online_only">{l s='Online only!'}</span>{/if}
{if (!$PS_CATALOG_MODE AND ((isset($product.show_price) && $product.show_price) || (isset($product.available_for_order) && $product.available_for_order)))}
<div>
<div class="content_price" itemprop="offers" itemscope itemtype="http://schema.org/Offer">
{if isset($product.show_price) && $product.show_price && !isset($restricted_country_mode)}
<span itemprop="price" class="price product-price">
{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}
</span>
<br />
{/if}
<meta itemprop="priceCurrency" content="{$currency->iso_code}" />


Проверить результаты можна тут
Для Prestashop 1.4

1. Создаём новую колонку long_description в таблице ps_category_lang базы данных через запрос PHPPMySQL

ALTER TABLE `ps_category_lang` ADD `long_description` text AFTER `description`;

2. В administrator/tabs/AdminCategories.php

после

'description' => array('title' => $this->l('Description'), 'width' => 280, 'maxlength' => 90, 'orderby' => false),

добавляем строку

'long_description' => array('title' => $this->l('Full'), 'width' => 200, 'maxlength' => 90, 'orderby' => false),

после блока

<label>'.$this->l('Description:').' </label>
<div class="margin-form translatable">';
foreach ($this->_languages AS $language)
echo '
<div class="lang_'.$language['id_lang'].'" style="display: '.($language['id_lang'] == $this->_defaultFormLanguage ? 'block' : 'none').'; float: left;">
<textarea name="description_'.$language['id_lang'].'" rows="10" cols="100">'.htmlentities($this->getFieldValue($obj, 'description', (int)($language['id_lang'])), ENT_COMPAT, 'UTF-8').'</textarea>
</div>';
echo ' <p class="clear"></p>
</div>

 вставляем строки

<label>'.$this->l('Full:').' </label>
<div class="margin-form translatable">';
foreach ($this->_languages AS $language)
echo '
<div class="lang_'.$language['id_lang'].'" style="display: '.($language['id_lang'] == $this->_defaultFormLanguage ? 'block' : 'none').'; float: left;">
<textarea name="long_description_'.$language['id_lang'].'" rows="10" cols="100">'.htmlentities($this->getFieldValue($obj, 'long_description', (int)($language['id_lang'])), ENT_COMPAT, 'UTF-8').'</textarea>
</div>';
echo ' <p class="clear"></p>
</div>

 3. В classes/Category.php добавляем

после


/** @var string Description */
public $description;

 добвляем строки 

/** @var string long_description */
public $long_description;

 и после

'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),

 добавляем

'long_description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),

 4. Для вывода дополнительного описания в файл themes/ваш шаблон/category.tpl в нужное место вставляем

{$category->long_description}

 

Для Prestashop 1.5

1. Создаём новую колонку long_description в таблице ps_category_lang базы данных через запрос PHPPMySQL

ALTER TABLE `ps_category_lang` ADD `long_description` text AFTER `description`;

 2. В controllers/admin/AdminCategoriesController.php

после

array(
'type' => 'textarea',
'label' => $this->l('Description:'),
'name' => 'description',
'autoload_rte' => true,
'lang' => true,
'rows' => 10,
'cols' => 100,
'hint' => $this->l('Invalid characters:').' <>;=#{}'
),

 добавляем 

array(
'type' => 'textarea',
'label' => $this->l('Long description:'),
'name' => 'long_description',
'autoload_rte' => true,
'lang' => true,
'rows' => 10,
'cols' => 100,
'hint' => $this->l('Invalid characters:').' <>;=#{}'
),

3. В classes/Category.php

после

/** @var string Description */
public $description;

 добавляем строки 

/** @var string long_description */
public $long_description;

 и после

'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),

 добавляем

'long_description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),

 4. Для вывода дополнительного описания в файл themes/ваш шаблон/category.tpl в нужное место вставляем

{if $category->long_description}
<div class="cat_desc">
<p>{$category->long_description}</p>
</div>
{/if}
Полный путь к директории где находится магазин

{$base_dir}

Полный путь к директории где находится магазин при использовании HTTPS протокола

{$base_dir_ssl}

Полный путь к директории где находится магазин с учетом SSL настроек

{$content_dir}

Путь к папке с изображениями

{$img_ps_dir}

Пусть к текущей папке с изображениями для выбранного шаблона

{$img_dir}

Пусть к папке со стилями для текущего шаблона

{$css_dir}

Пусть к папке с JavaScript для текущего шаблона

{$js_dir}

Полный путь к директории для текущего шаблона

{$tpl_dir}

Путь к папке с модулями

{$modules_dir}

Путь к паке с шаблонами почтовых уведомлений

{$mail_dir}

Текущие языковые настройки в формате ISO

{$lang_iso}

Предыдущий адрес страницы (абсолютный)

{$come_from}

Название магазина

{$shop_name}

Количество товаров в корзине покупателя

{$cart_qties}

Содержимое корзины покупателя

{$cart}

Отображение доступных валют

{$currencies}

ID выбранной валюты

{$id_currency_cookie}

Выбранная валюта

{$currency}

Активный cookie

{$cookie}

Отображение языков локализации

{$languages}

Отображение статуса, пользователь зарегистрирован или нет

{$logged}

Название текущей страницы

{$page_name}

Текущее имя пользователя с учетом сессии

{$customerName}

Текущая стоимость продуктов в корзине в зависимости от выбранной валюты

{$priceDisplay}

Дата последнего обновления изображения

{$img_update_time}

Эл. адрес магазина

{$shop_email}

Страна магазина

{$shop_country}

Текущая страна

{$shop_country_id}

Область

{$shop_state}

Текущая область

{$shop_state_id}

Адрес магазина 1

{$shop_addr1}

Адрес магазина 2

{$shop_addr2}

Почтовый индекс

{$shop_code}

Город

{$shop_city}

Телефон

{$shop_phone}

Факс

{$shop_fax}

Информация о магазине

{$shop_details}
Для запрета перехода в корневую директорию root достаточно в файл .htaccess прописать:

Redirect /content/category/1-home /
Для вывода характеристик добавляем в product-list.tpl

{foreach from=$product.features item=feature name=features}
{$feature.name|escape:'htmlall':'UTF-8'}{$feature.value|escape:'htmlall':'UTF-8'}
{/foreach}
Для выполнения этой задачи нужно в product-sort.tpl добавить код

<option value="{$link->addSortDetails($request, 'reference', 'asc')|escape:'htmlall':'UTF-8'}" {if $orderby eq 'reference' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Reference: A to Z'}</option>
<option value="{$link->addSortDetails($request, 'reference', 'desc')|escape:'htmlall':'UTF-8'}" {if $orderby eq 'reference' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Reference: Z to A'}</option>

Затем необходимо внести правки в override/classes/Tools.php

$list = array(0 => 'name', 1 => 'price', 2 => 'date_add', 3 => 'date_upd', 4 => 'position', 5 => 'manufacturer_name', 6 => 'quantity', 7 => 'reference');

и

if ($value == 'id_product' || $value == 'date_add' || $value == 'date_upd' || $value == 'price' || $value == 'reference')