Задача - у материала есть дополнительное поле с валютой (decimal) куда вносится цена товара в евро, в карточке товара (полном тексте материала) нужно отображать значение по текущему курсу центробанка. Для этого делаем нужный нам функционал, через функцию, подключаемую на уровне шаблона материала
В файле \templates\шаблон\html\com_content\article\default.php добавляем строку (у меня много функций разных прикладных в этом файле лежат, можно и прямо в код вставлять)
1 | include_once(JPATH_ROOT .'/templates/шаблон/pb_function.php'); |
Дальше в этом же файле в нужном месте обращаемся к функции курса, передавая туда ID текущего объекта (материала)
1 | <?php echo course($this->item->id); ?> |
сам файл pb_function.php должен содержать такой вот код
1 23 45 67 89 1011 1213 1415 1617 1819 2021 2223 2425 2627 2829 3031 3233 3435 3637 3839 4041 4243 4445 4647 4849 5051 5253 | function course($id) { $db = JFactory::getDBO(); $sql = 'select p_price from #__content where id = "'.$id.'" '; $db->setQuery($sql); $row = $db->loadRow(); $price = $row[0]; // получаем данные о текущем курсе jimport('joomla.filesystem.file'); jimport('joomla.application.application'); /* Сохранить http://www.cbr.ru/scripts/XML_daily.asp локально с именем текущей даты. При загрузке проверить совпадение даты, если нет - прочитать с ЦБ заново, удалить старый, сохранить новый */ $dailyxml = date('dmY'); $dailyxml_url = JPATH_CACHE . DS . $dailyxml.'_daily.xml'; if (JFile::exists($dailyxml_url)) { // файл уже есть, значит парсим, функция $eur = dailyxml_parser($dailyxml_url, 'EUR'); } else { // файла нет, значит удалим файл за вчера, создадим и функция парсим $dailyxml_url_old = JPATH_CACHE . DS . date('dmY', time()-86400).'_daily.xml'; JFile::delete($dailyxml_url_old); // новый файл $date = date('d/m/Y'); $link = 'http://www.cbr.ru/scripts/XML_daily.asp?date_req='.$date; $fd = fopen($link, 'r'); $dailyxml_text = ''; if (!$fd) { echo 'error page www.cbr.ru/scripts/XML_daily.asp'; } else { while (!feof ($fd)) $dailyxml_text .= fgets($fd, 4096); } fclose ($fd); // грабим текст в файл $dailyxml_url = JPATH_CACHE . DS . $dailyxml.'_daily.xml'; JFile::write($dailyxml_url, $dailyxml_text); // получаем курс $eur = dailyxml_parser($dailyxml_url, 'EUR'); } // считаем цену по курсу евро $price = $price*$eur; $price = number_format($price, 0, '', ''); return $price; }function dailyxml_parser($url, $charcode) { $file = simplexml_load_file($url); $valutes = array(); foreach ($file AS $el){ $valutes[strval($el->CharCode)] = strval($el->Value); } return str_replace(',', '.', $valutes[$charcode]); } |
Нужная другая валюта - то при вызове функции dailyxml_parser указываем другой КОД, параметры валют можно посмотреть в файле \cache\дата.хмл, элемент хмл CharCode
Комментарии