Здравствуйте!
Прежде всего, всех с наступающим!
Необходимо реализовать на сайте переключатель валют в шаблоне Full в виде выпадающего списка. По умолчанию сделано только в виде радиокнопок, и других вариантов нет, только в модуле разве что...
Вносил изменения в функцию в файле /media/zoo/applications/jbuniversal/framework/helpers/jbhtml.php
Функция:
public function currencyToggle($defaultCur = 'eur', $rates = null, $options = array(), $return = false) { $rates = !empty($rates) ? $rates : $this->app->jbmoney->getData(); $defaultCur = $this->_vars->lower($defaultCur); $uniqId = $this->_jbstring->getId(); $systemDefault = JBModelConfig::model()->getCurrency(); if (isset($rates['%'])) { unset($rates['%']); } $options = $this->app->data->create(array_merge(array( 'showDefault' => true, ), $options)); $i = 0; $count = count($rates); $html = array(); foreach ($rates as $code => $currency) { $i++; $id = $this->_jbstring->getId('unique-'); $title = JText::_('JBZOO_JBCURRENCY_' . $code); $moneyVal = JBCart::val('1000 ' . $code, $rates); // for calculating if ($systemDefault != JBCartValue::DEFAULT_CODE && !$moneyVal->isCur($systemDefault)) { $title .= '; ' . $moneyVal->text() . ' ≈ ' . $moneyVal->text($systemDefault); } $inputAttrs = array( 'type' => 'radio', 'name' => 'currency[' . $uniqId . '][]', 'id' => $id, 'data-currency' => $code, 'class' => array( 'jbcurrency-input', 'jbcurrency-' . $code, ), ); if ($code == $defaultCur) { $inputAttrs['checked'] = 'checked'; } $labelAttrs = array( 'for' => $id, 'title' => $title, 'class' => array( 'jbcurrency-label', 'jbtooltip', 'hasTip', ), ); if ($i == $count) { $inputAttrs['class'][] = 'isLast'; $labelAttrs['class'][] = 'isLast'; } if ($i == 1) { $inputAttrs['class'][] = 'isFirst'; $labelAttrs['class'][] = 'isFirst'; } $flag = ($code == JBCartValue::DEFAULT_CODE) ? '<span class="jbflag jbflag-' . $code . '">¤</span>' : '<span class="jbflag jbflag-' . $code . '"></span>'; $html[] = '<input ' . $this->buildAttrs($inputAttrs) . ' />'; $html[] = '<label ' . $this->buildAttrs($labelAttrs) . '>' . $flag . '</label>'; } if (!empty($html)) { $id = $this->_jbstring->getId('currency-toggle-'); $this->_assets->initTooltip(); $html[] = $this->_assets->currencyToggle($id, (array)$options, $return); $widgetAttrs = array( 'data-default' => $moneyVal->cur(), 'id' => $id, 'class' => array( 'jsCurrencyToggle', 'currency-toggle', ), ); $html = '<div ' . $this->buildAttrs($widgetAttrs) . '>' . implode(PHP_EOL, $html) . '</div>'; return $html; } return null; }
После моих изменений функция выглядит таким образом:
public function currencyToggle($defaultCur = 'eur', $rates = null, $options = array(), $return = false) { $rates = !empty($rates) ? $rates : $this->app->jbmoney->getData(); $defaultCur = $this->_vars->lower($defaultCur); $uniqId = $this->_jbstring->getId(); $systemDefault = JBModelConfig::model()->getCurrency(); if (isset($rates['%'])) { unset($rates['%']); } $options = $this->app->data->create(array_merge(array( 'showDefault' => true, ), $options)); $i = 0; $count = count($rates); $html = array(); foreach ($rates as $code => $currency) { $i++; $id = $this->_jbstring->getId('unique-'); $title = JText::_('JBZOO_JBCURRENCY_' . $code); $moneyVal = JBCart::val('1000 ' . $code, $rates); // for calculating if ($systemDefault != JBCartValue::DEFAULT_CODE && !$moneyVal->isCur($systemDefault)) { $title .= '; ' . $moneyVal->text() . ' ≈ ' . $moneyVal->text($systemDefault); } $inputAttrs = array( 'value' => $code, 'name' => 'currency[' . $uniqId . '][]', 'id' => $id, 'data-currency' => $code, 'class' => array( 'jbcurrency-input', 'jbcurrency-' . $code, ), ); if ($code == $defaultCur) { $inputAttrs['selected'] = 'selected'; } $labelAttrs = array( 'for' => $id, 'title' => $title, 'class' => array( 'jbcurrency-label', 'jbtooltip', 'hasTip', ), ); if ($i == $count) { $inputAttrs['class'][] = 'isLast'; $labelAttrs['class'][] = 'isLast'; } if ($i == 1) { $inputAttrs['class'][] = 'isFirst'; $labelAttrs['class'][] = 'isFirst'; } $flag = ($code == JBCartValue::DEFAULT_CODE) ? '<span class="jbflag jbflag-' . $code . '">¤</span>' : '<span class="jbflag jbflag-' . $code . '"></span>'; $html[] = '<option ' . $this->buildAttrs($inputAttrs) . ' >' . $code . '</option>'; $html[] = '<label ' . $this->buildAttrs($labelAttrs) . '>' . $flag . '</label>'; } if (!empty($html)) { $id = $this->_jbstring->getId('currency-toggle-'); $this->_assets->initTooltip(); $html[] = $this->_assets->currencyToggle($id, (array)$options, $return); $widgetAttrs = array( 'data-default' => $moneyVal->cur(), 'id' => $id, 'class' => array( 'jsCurrencyToggle', 'currency-toggle', ), ); $html = '<select ' . $this->buildAttrs($widgetAttrs) . '>' . implode(PHP_EOL, $html) . '</select>'; return $html; } return null; }
Суть проблемы в том, что сам по себе селект появился, но при изменении валюты - валюта не переключается.
Подскажите пожалуйста, в чём проблема, и как это можно исправить.