Автор Тема: Разложить строку атрибута продукта на странице состояния корзины  (Прочитано 719 раз)

09 Ноябрь 2015, 14:55:30
  • Старожил
  • ****
  • Сообщений: 380
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Всем доброго дня!
На странице состояния корзины в файле  shopping-cart-product-line.tpl
<a href="{$link->getProductLink($product.id_product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'html':'UTF-8'}">
{$product.attributes|escape:'html':'UTF-8'}
</a>
Вывод атрибута продукта.
Необходимо вывести составную строку из значения $product.attributes
В JavaScript это можно сделать
<script language="JavaScript">
 {
txt_el = document.getElementById('strdok');

var stringOne = txt_el.value;
var wheresWaldo = stringOne.indexOf(","); // перв
var wheresWaldoS = stringOne.lastIndexOf(","); // послед

var stringTwo = stringOne.substring(0, wheresWaldo); //  по первый запятую
var stringTwoS = stringOne.substring(wheresWaldoS,100); //  по первый запятую

txt_el.value = "";
txt_el.value = stringTwo+stringTwoS;
alert(txt_el.value);
document.write(txt_el.value);
}
</script>
Но это по ID.
А вот как поставить  вместо 
txt_el = document.getElementById('strdok');txt_el = получить значение $product.attributes
Если присвоить txt_el =  значение $product.attributes то все получиться.
Спасибо!

09 Ноябрь 2015, 15:11:05
Ответ #1
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Поставьте ид / класс элемента внутри которого выводится product.attributes.
09 Ноябрь 2015, 15:39:55
Ответ #2
  • Старожил
  • ****
  • Сообщений: 380
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо большое за ответ.
Только я что-то не догоняю..Вот скрипт типовой

<tr id="product_{$product.id_product}_{$product.id_product_attribute}_{if $quantityDisplayed > 0}nocustom{else}0{/if}_{$product.id_address_delivery|intval}{if !empty($product.gift)}_gift{/if}" class="cart_item{if isset($productLast) && $productLast && (!isset($ignoreProductLast) || !$ignoreProductLast)} last_item{/if}{if isset($productFirst) && $productFirst} first_item{/if}{if isset($customizedDatas.$productId.$productAttributeId) AND $quantityDisplayed == 0} alternate_item{/if} address_{$product.id_address_delivery|intval} {if $odd}odd{else}even{/if}">
<td class="cart_product">

<a href="{$link->getProductLink($product.id_product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'html':'UTF-8'}"><img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'small_default')|escape:'html':'UTF-8'}" alt="{$product.name|escape:'html':'UTF-8'}" {if isset($smallSize)}width="{$smallSize.width}" height="{$smallSize.height}" {/if} /></a>

</td>
<td class="cart_description">

<p class="product-name"><a href="{$link->getProductLink($product.id_product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'html':'UTF-8'}">{$product.name|escape:'html':'UTF-8'}</a></p>


        {if $product.reference}<small class="cart_ref">{l s='SKU'} : {$product.reference|escape:'html':'UTF-8'}</small>{/if}
{if isset($product.attributes) && $product.attributes}

<small>
<a href="{$link->getProductLink($product.id_product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'html':'UTF-8'}">
{$product.attributes|escape:'html':'UTF-8'}
</a>

</small>{/if}
</td>
Вывод в
<a href="{$link->getProductLink($product.id_product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'html':'UTF-8'}">
{$product.attributes|escape:'html':'UTF-8'}
</a>
Подскажите какой ID/класс я должен поставить.
Спасибо!

09 Ноябрь 2015, 15:46:53
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Цитировать
Вывод в
<a href="{$link->getProductLink($product.id_product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'html':'UTF-8'}">
{$product.attributes|escape:'html':'UTF-8'}
</a>
Добавить свой класс к тегу <a>
<a class="myclass"
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
09 Ноябрь 2015, 16:09:06
Ответ #4
  • Старожил
  • ****
  • Сообщений: 380
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо за ответы.
Но так не идет
txt_el = document.getElementById('myclass');
или я неправельно ставлю сюда myclass - document.getElementById('myclass');
09 Ноябрь 2015, 16:32:03
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Справочник по javascript поможет понять почему не работает
getElementById
метод объекта document. Он возвращает ссылку на узел документа по ID, которую можно использовать для изменения свойств и обращения к методам узла.

С классом немного сложнее, так как метода getElementByClass нет. Его нужно определять самому. Есть много реализаций, какой лучше не знаю. Можно использовать такой
/*
classList - Список классов, разделенный пробелами, элементы с которыми нужно искать.
node -  Контекст поиска, внутри какого узла искать
*/
if(document.getElementsByClassName) {
getElementsByClass = function(classList, node) {   
return (node || document).getElementsByClassName(classList)
}
} else {
getElementsByClass = function(classList, node) {
var node = node || document,
list = node.getElementsByTagName('*'),
length = list.length, 
classArray = classList.split(/\s+/),
classes = classArray.length,
result = [], i,j
for(i = 0; i < length; i++) {
for(j = 0; j < classes; j++)  {
if(list[i].className.search('\\b' + classArray[j] + '\\b') != -1) {
result.push(list[i])
break
}
}
}
return result
}
}
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
09 Ноябрь 2015, 17:09:40
Ответ #6
  • Старожил
  • ****
  • Сообщений: 380
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо большое. Буду думать.
Есть простой вариант через
<input type="hidden" name = "strdok" id="strdok" value="{$product.attributes}" />
и далее
txt_el = document.getElementsById('strdok');
Но input при загрузке берется 1 раз первого продукта и все последующие значения равны первому значению первого продукта.
Можно как-то в input присваивать каждый раз новые значения  value, ну а если нет... то буду смотреть классы.

Спасибо!
09 Ноябрь 2015, 18:20:07
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
id="strdok"Вот поэтому значения одинаковые. Ид можно использоть только 1 раз на страницы. Для множественного использования класс.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
09 Ноябрь 2015, 18:30:10
Ответ #8
  • Старожил
  • ****
  • Сообщений: 380
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо! Все понятно!
Есть одно мысля.. попробую потом отпишусь...
09 Ноябрь 2015, 22:00:09
Ответ #9
  • Старожил
  • ****
  • Сообщений: 380
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Вы правы только через класс. Но я решил через input.

<input class="myclass" type="text" name = "strdok" id="strdok" value="{$product.attributes}" style="display: none;">

<script language="JavaScript">
 {

var x = document.getElementsByClassName("myclass");
var i;
var k = x.length;;
for (i = k-1; i < x.length; i++) {
   
var txt_el = x.value;
alert(x.value);

}

Здесь с txt_el  можно делать что угодно..

document.write(txt_el);
}
</script>

Спасибо всем !!  вопрос закрыт.