Сегодня попробуем сделать следующее:
Сделаем возможным, чтобы у Configurable продуктов менялись фотографии продуктов на странице с информацией при смене опции.
1) Откроем файл
app/design/frontend/*/*/template/catalog/product/view.phtml
Заменим
на
2) Oткроем
app/design/frontend/*/*/template/catalog/product/view/type/options/configurable.phtml
Заменим
на
3) Файл
js/varien/configurable.js
a) Добавляем в самое начало файла
b) В функцию configureElement : function(element), сразу после this.reloadPrice() добавляем
Не забывайте! что мы правили js файл configurable.js следовательно если Вы решите обновить систему, то этот файл потрется. Не забудьте сделать копию предварительно.
Взято, ПРОВЕРЕНО, изменено и переведено отсюда
Сделаем возможным, чтобы у Configurable продуктов менялись фотографии продуктов на странице с информацией при смене опции.
1) Откроем файл
app/design/frontend/*/*/template/catalog/product/view.phtml
Заменим
var optionsPrice = new Product.OptionsPrice(getJsonConfig() ?>);
на
var optionsPrice = new Product.OptionsPrice(getJsonConfig() ?>);
var assocIMG =
getTypeId() == "configurable") {
echo "{";
$associated_products = $_product->loadByAttribute('sku', $_product->getSku())->getTypeInstance()->getUsedProducts();
foreach ($associated_products as $assoc)
$dados[] = $assoc->getId().":'".($assoc->image == "no_selection" || $assoc->image == "" ? $this->helper('catalog/image')->init($_product, 'image', $_product->image)->resize(365,400) : $this->helper('catalog/image')->init($assoc, 'image', $assoc->image)->resize(365,400))."'";
} else {
$dados[] = "''";
}
echo implode(',', $dados );
if ($_product->getTypeId() == "configurable") {
echo "}";
}
2) Oткроем
app/design/frontend/*/*/template/catalog/product/view/type/options/configurable.phtml
Заменим
var spConfig = new Product.Config(getJsonConfig() ?>);
на
var spConfig = new Product.Config(getJsonConfig() ?>);
var selectedAssocProducts = {};
3) Файл
js/varien/configurable.js
a) Добавляем в самое начало файла
if(typeof selectedAssocProducts=='undefined') {
var selectedAssocProducts = {};
}
b) В функцию configureElement : function(element), сразу после this.reloadPrice() добавляем
if (!element.value || element.value.substr(0,6) == 'choose') return; // Selected "choose option"
var attributeId = element.id.replace(/[a-z]*/, '');
for (var a in this.config.attributes)
{
for (i = 0; i < this.config.attributes[a].options.length; i++)
{
if (this.config.attributes[a].options[i].id != element.value) continue;
selectedAssocProducts[a] = this.config.attributes[attributeId].options[i].products;
}
}
var productNo = intersect(selectedAssocProducts) || selectedAssocProducts[attributeId][0];
$('image').src = assocIMG[productNo];
c) Меняем метод resetChildren : function(element) на resetChildren : function(element){
delete selectedAssocProducts[element.config.id];
if(element.childSettings) {
for(var i=0;i < element.childSettings.length;i++){
element.childSettings[i].selectedIndex = 0;
element.childSettings[i].disabled = true;
delete selectedAssocProducts[element.childSettings[i].config.id];
if(element.config){
this.state[element.config.id] = false;
}
}
}},
d) В конец файда добавляем: function intersect(ar) // ar can be an array of arrays or an asssociative array
{
if (ar == null) return false;
var a = new Array();
if (ar.length == undefined) // Associate Array
{
for (var i in ar)
a.push(ar[i]);
}
else
a = ar;
if (a.length == 1) return false; // Single array ? Nothing to intersect with
var common = new Array();
function loop(a, index, s_index, e_index)
{
if (index == null) index = 0;
if (s_index == null) s_index = 0;
if (e_index == null) e_index = a[index].length;
if (index == a.length - 1) return;
for (var i = s_index; i < e_index; i++)
{
if (common.indexOf(a[index][i]) != -1) continue;
for (var j = 0; j < a[index + 1].length; j++)
{
if (a[index][i] != a[index+1][j]) continue;
loop(a, index + 1, j, j + 1);
if (index + 1 == a.length - 1) { common.push(a[index][i]); break; }
}
}
}
loop(a);
return common;
}
Сохраняем все. И готово.Не забывайте! что мы правили js файл configurable.js следовательно если Вы решите обновить систему, то этот файл потрется. Не забудьте сделать копию предварительно.
Взято, ПРОВЕРЕНО, изменено и переведено отсюда
