В общем, ребят, сам php можно сказать только начинаю осваивать, требуется помощь в допиливании JoomShopping'a. Ввожу дополнительную тему с бонусами.
В общем по порядку:
1. Требуется вывести в карточке товара (в зависимости от атрибута — разное значение бонусов)
Что сделал:
Так как у каждого товара есть атрибуты (объем, кол-во шт. в упаковке и пр.) и в зависимости от атрибутов зависит цена, то в таблице jshopping_products_attr создал столбец bonus, в котором будут прописываться бонусы к каждой конкретной позиции.
Создал несколько тестовых товаров, добавил атрибуты и несколько разных цен, заполнил соответственно ячейки со значением бонусов. Что делаю дальше, иду в
components/com_jshopping/tables/product.php. Добавляю следующую функцию:
function getBonusCalculate(){
$query = "SELECT bonus FROM grm_jshopping_products_attr WHERE product_id='".$this->product_id."' and product_attr_id='".$this->attribute_active_data->product_attr_id."'";
$db =& JFactory::getDBO();
$db->setQuery($query);
return $db->loadResult();
}
Дальше иду в карточку товара (
components/com_jshopping/templates/mytheme/product/product_default.php)и добавляю вывод значения бонуса (с учетом правильного склонения):
<?php function sklonenieBonus($n, $forms) {
return $n%10==1&&$n%100!=11?$forms[0]:($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$forms[1]:$forms[2]);
} ?>
<span id="block_bonus" class="jshop_bonus">+ <?php print $this->product->getBonusCalculate()." ". sklonenieBonus($this->product->getBonusCalculate(), array('бонус', 'бонуса', 'бонусов') )?></span>
PS: в склонение
array('бонус', 'бонуса', 'бонусов'В результате получаю следующее:

Но, при выборе другого значения атрибута значение бонуса не меняется! Путем упорного поиска нашел, что цена при смене атрибута меняется вот тут:
components/com_jshopping/controllers/product.php, а именно
* get attributes HTML selects, price for select attribute
*/
function ajax_attrib_select_and_price(){
$db = &JFactory::getDBO();
$jshopConfig = &JSFactory::getConfig();
$product_id = JRequest::getInt('product_id');
$change_attr = JRequest::getInt('change_attr');
$qty = JRequest::getInt('qty');
if ($qty < 0) $qty = 0;
$attribs = JRequest::getVar('attr');
if (!is_array($attribs)) $attribs = array();
$product = &JTable::getInstance('product', 'jshop');
$product->load($product_id);
$attributesDatas = $product->getAttributesDatas($attribs);
$product->setAttributeActive($attributesDatas['attributeActive']);
$attributeValues = $attributesDatas['attributeValues'];
$attributes = $this->_buildSelectAttributes($attributeValues, $attributesDatas['attributeSelected']);
$rows = array();
foreach($attributes as $k=>$v){
$v->selects = str_replace(array("\n","\r","\t"), "", $v->selects);
$rows[] = '"id_'.$k.'":"'.str_replace('"','\"',$v->selects).'"';
}
$pricefloat = $product->getPrice($qty, 1, 1, 1);
$price = formatprice($pricefloat);
$available = intval($product->getQty() > 0);
$ean = $product->getEan();
$weight = formatweight($product->getWeight());
$weight_volume_units = $product->getWeight_volume_units();
$rows[] = '"price":"'.$price.'"';
$rows[] = '"pricefloat":"'.$pricefloat.'"';
$rows[] = '"available":"'.$available.'"';
$rows[] = '"ean":"'.$ean.'"';
if ($jshopConfig->admin_show_product_basic_price){
$rows[] = '"wvu":"'.$weight_volume_units.'"';
}
if ($jshopConfig->product_show_weight){
$rows[] = '"weight":"'.$weight.'"';
}
$product->updateOtherPricesIncludeAllFactors();
if (is_array($product->product_add_prices)){
foreach($product->product_add_prices as $k=>$v){
$rows[] = '"pq_'.$v->product_quantity_start.'":"'.str_replace('"','\"',formatprice($v->price)).'"';
}
}
print '{'.implode(",",$rows).'}';
die();
}
Логически поразмыслив, добавил инфу по бонусам, но результат остался прежним, из чего делаем вывод — чего-то не хватает (полностью приводить не стал, а только там, где менял):
$pricefloat = $product->getPrice($qty, 1, 1, 1);
$bonus = $product->getBonusCalculate();
$price = formatprice($pricefloat);
$available = intval($product->getQty() > 0);
$ean = $product->getEan();
$weight = formatweight($product->getWeight());
$weight_volume_units = $product->getWeight_volume_units();
$rows[] = '"price":"'.$price.'"';
$rows[] = '"bonus":"'.$bonus.'"';
$rows[] = '"pricefloat":"'.$pricefloat.'"';
$rows[] = '"available":"'.$available.'"';
$rows[] = '"ean":"'.$ean.'"';
Очень нужна помощь, как все же вывести бонусы в карточку товара, чтобы они менялись) Еще раз напоминаю, что с php только начинаю осваиваться и пока делаю все по аналогии, так как понять все тонкости для меня еще сложно, но параллельно изучаю
2. Вывод бонусов в корзине и их суммирование в итоге.Здесь дела обстоят гораздо хуже. Данные по товару выводятся так, это понятно:
<?php print $prod['product_name'];?>
<?php print formatprice($prod['price'])?>
и так далее, соответственно для бонусов нужно сделать вот так:
<?php print $prod['bonus'] ?>
Но вот как и куда прикрутить данные по выбранному бонусу, я не понимаю, и куда копать, тоже непонятно. Подскажите пожалуйста
