Разложить строку атрибута продукта на странице состояния корзины

Автор piter, 09 ноября 2015, 14:55:30

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

piter

Всем доброго дня!
На странице состояния корзины в файле  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 то все получиться.
Спасибо!


DarinSr

Поставьте ид / класс элемента внутри которого выводится product.attributes.

piter

Спасибо большое за ответ.
Только я что-то не догоняю..Вот скрипт типовой

<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/класс я должен поставить.
Спасибо!


PrestaMan

ЦитироватьВывод в
<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.
Лучшие цены!!!

piter

Спасибо за ответы.
Но так не идет
txt_el = document.getElementById('myclass');
или я неправельно ставлю сюда myclass - document.getElementById('myclass');

PrestaMan

Справочник по 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.
Лучшие цены!!!

piter

Спасибо большое. Буду думать.
Есть простой вариант через
<input type="hidden" name = "strdok" id="strdok" value="{$product.attributes}" />
и далее
txt_el = document.getElementsById('strdok');
Но input при загрузке берется 1 раз первого продукта и все последующие значения равны первому значению первого продукта.
Можно как-то в input присваивать каждый раз новые значения  value, ну а если нет... то буду смотреть классы.

Спасибо!

PrestaMan

id="strdok"
Вот поэтому значения одинаковые. Ид можно использоть только 1 раз на страницы. Для множественного использования класс.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

piter

Спасибо! Все понятно!
Есть одно мысля.. попробую потом отпишусь...

piter

Вы правы только через класс. Но я решил через 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>

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