Best Answer Flowerchek , 11 September 2016 - 21:50
Ок. Значит я сделала этот элемент ![]()
Правда это больше похоже на костыли и подпорки, но все же он работает.
Возможно кому-то это пригодиться (мало ли у кого такой же причудливый заказчик). Поэтому оставлю базовый код здесь.
Добавила media/zoo/applications/jbuniversal/cart-elements/price/eclquant - свой элемент (простая xml).
eclqant.php
<?php
// no direct access
defined('_JEXEC') or die('Restricted access');
/**
* Class JBCartElementPriceProperties
*/
class JBCartElementPriceEclquant extends JBCartElementPrice
{
/**
* Check if element has value
* @param array $params
* @return bool
*/
public function hasValue($params = array())
{
return $this->getValue();
}
/**
* @param array $params
* @return mixed|null|string
*/
public function edit($params = array())
{
if ($layout = $this->getLayout('edit.php')) {
return self::renderEditLayout($layout, array(
'value' => $this->get('value')
));
}
return null;
}
/**
* @param array $params
* @return array|mixed|null|string|void
*/
public function render($params = array())
{
if ($layout = $this->getLayout()) {
return self::renderLayout($layout, array(
'value' => $this->getValue()
));
}
}
}
tmpl/eclquant.php
<?php
// no direct access
defined('_JEXEC') or die('Restricted access');
$value = trim($value);
?>
<?php if ($value): ?>
<input class="jbprice-eclquant-input jbaddprice" data-quant="<?php echo $value ?>" value="<?php echo $value ?>"/>
<input type="hidden" value="<?php echo $value; ?>" />
<?php endif; ?>
tmpl/edit.php
<?php
// no direct access
defined('_JEXEC') or die('Restricted access');
echo $this->_jbhtml->text($this->getControlName('value'), $value, $this->_jbhtml->buildAttrs(array(
'placeholder' => JText::_('JBZOO_ELEMENT_PRICE_ECLQUANT_QUANT')
)));
?>
Самое инетерсное в assets/js/eclquant.js
;
(function ($, window, document, undefined) {
$(window).load(function() {
function eclquantFormat(value) {
if (parseInt(value) !== parseFloat(value)) {
return value.toFixed(2)
}
return value
}
$('.quantity-wrapper.jsQuantity').each(function(index, el) {
var quantity = $(el).data('JBZooQuantity')
var priceElement = $(el).parent().parent()
// setup onChange value
$(el).on('change.JBZooQuantity', function (ev, prev, cur) {
priceElement.find('.jbprice-eclquant-input').each(
function (i, eclq) {
$(eclq).val(eclquantFormat($(eclq).data('quant') * cur))
}
)
})
priceElement.find('.jbprice-eclquant-input').each(
function(i, eclq) {
$(eclq).val(eclquantFormat($(eclq).data('quant') * quantity.getValue()))
// setup reverse onChange value
$(eclq).on('change', function(e) {
var quant = $(eclq).data('quant')
var now = $(eclq).val()
quantity.setValue(Math.ceil(now / quant))
})
}
)
})
});
})(jQuery, window, document);
Что делает элемент:
* на увеличение количества/quantity увеличивает на заданное число значение этого элемента
* при попытке изменить значение этого элемента, он вычисляет количество и обновляет значение элемента количество;
Т.е. он работает как следующий паттерн. Я добавляю этот элемент к параметрам цены (штук в пачке), и устанавливают его равным 6.
Далее мне рисуется input с числом равным 6. При увеличении количества увеличивается и это значение в input (например при количестве 10, штук будет 60). При изменении значения самого элемента (скажем с 12 на 13), он автоматически округлит до ближайшего целого (т.е. количество станет 3, а значение в элементе станет 18).
Аналогично я сделала и с квадратными метрами.
Я бы конечно, хотела услышать предложения, как это лучше можно организовать и сделать.
Go to the full post


This topic is locked









