Индикатор текущей загрузки команды

# Kherson Development Team

Разработка и сопровождение сайтов и прикладных WEB-приложений
Украина, г. Херсон
5/12

Поиск по сайтам Kherson Development Team (gelos.org.ua, kdt.biz.ua), в том числе и по комментам.

Joomla, Virtuemart // Мини-FAQ Joomla & Virtuemart

### Мини-FAQ Joomla & Virtuemart

1 2 3 4 5 0 оценок

Написано пользователем admin , 28 мая 2009 | Написать комментарий

Этот мини-FAQ сформирован исходя из встретившихся в процессе выполнения проектов проблем и вопросов заказчиков. В нем освещены следующие вопросы:

- Нельзя корректировать уже созданные способы оплаты (часть страницы появляется только на доли секунды)
- Из буфера обмена в редактор JCE таблицы вставляются только в эксплорере. В опере вставка не работает. Это можно исправить?
- Хочу чтобы скидки в виртуамарте отображались не только в процентном выражении (например, 2,00%), но и в денежном (например, 25,12 грн/руб/дол.). Как добиться желаемого?:-)
- Почему некоторые ссылки указанные в письме – подтверждении заказа не работают или имеют вид типа index2.php?page=order.order_print……, в следствие чего они не работают…
- При использовании стандартного модуля vmDrill (последовательный выбор товаров начиная от категорий товаров и заканчивая конкретными моделями) при выборе конкретной модели товара страница загружается правильная, а вот навигация сбивается.
- Где можно найти справочную информацию о написании шаблонов для Virtuemart?
- Выборочно и непредсказуемо глючит кнопка «печать» при попытке распечатать конкретные товары и категории из марта. По нажатию на эту кнопку выбивается ошибка 404.
- Как организовать добавление и вывод дополнительных картинок (больше 1) для товаров в Virtuemart.
- Каким образом можно заменить стандартный Lightbox, входящий в поставку Joomla, на что-нибудь другое, например Highslide. И, в частности, потом заставить работать Highslide для отображения картинок в Virtuemart?
- Модуль mod_virtuemart_s5_dropdown_cart не проверяет существует ли файл картинки, указанный в базе данных и часто тупо выводит несуществующие картинки. Хотелось бы это поправить…
- Модуль mod_s5_quick_contact присылает письма в неправильной кодировке

ВОПРОС: Нельзя корректировать уже созданные способы оплаты (часть страницы появляется только на доли секунды)
ОТВЕТ: Она не исчезает, а после загрузки попадает во вкладку «настройки». Так называемое «исчезание» – просто промежуточный этап загрузки страницы. Кроме того, набор элементов управления на странице создания нового способа оплаты зависит от выбранных на этой странице опций. Кроме того, содержимое вкладки «Настройки» определяется классом, привязанным к редактируемому или вновь создаваемого способа оплаты.

ВОПРОС: Из буфера обмена в редактор JCE таблицы вставляются только в эксплорере. В опере вставка не работает. Это можно исправить?
ОТВЕТ: Можно, но такие правки могут вноситься только самими разработчиками JCE. По всей вероятности, опера неверно обрабатывает данные, положенные в буфер обмена MS Office (вероятнее всего 2007). Можно попробовать скопировать в нее данные из Office 2003. Ну а если уже не получится, рекомендую для управления сайтом использовать Firefox. В данном случае он является промежуточным звеном, более корректно обрабатывающим JS скрипты и при этом работающим гораздо быстрее и удобнее Internet Explorer.

ВОПРОС: Хочу чтобы скидки в виртуамарте отображались не только в процентном выражении (например, 2,00%), но и в денежном (например, 25,12 грн/руб/дол.). Как добиться желаемого?
ОТВЕТ: Для этого необходимо отредактировать файл /components/com_virtuemart/themes/default/templates/common/price.tpl.php (стр. 81). Преобразовываем кусок кода к следующему виду:

    if($discount_info["is_percent"]==1)
    {
       ### рассчитываем в денежном выражении размер скидки ####
       $kdt_old_price = (string)$CURRENCY_DISPLAY->getFullValue
       ($undiscounted_price);
       $kdt_new_price = (string)$CURRENCY_DISPLAY->getFullValue
       ($base_price);
       $kdt_old_price = str_replace(" ", "", $kdt_old_price);
       $kdt_old_price = 0.00 + str_replace(",", ".", $kdt_old_price);
       $kdt_new_price = str_replace(" ", "", $kdt_new_price);
       $kdt_new_price = 0.00 + str_replace(",", ".", $kdt_new_price);
       $kdt_discount_summ = (double)$kdt_old_price - $kdt_new_price;
       echo str_replace(".", ",", $kdt_discount_summ)." грн. (".
       $discount_info["amount"]."%)</b>";
    }

Конструкция-то вобщем простейшая, единственная загвоздка заключается в том, что для того, чтобы выполнить одно простейшее действие (отнять новую цену от старой цены) необходимо на 6 строках приводить исходные данные ко вменяемому виду:-)

ВОПРОС: Почему некоторые ссылки указанные в письме – подтверждении заказа не работают или имеют вид типа index2.php?page=order.order_print……, в следствие чего они не работают…
ОТВЕТ: по непонятной причине Virtuemart не указывает во многих местах (в том числе и в ссылках в письмах) адреса сайта, включающего и URL. Для того, чтоб URL добавить необходимо отредактировать файл /components/com_virtuemart/themes/default/templates/order_emails/confirmation_email.tpl.php, добавив в строку 577 следующий текст:

    $order_link = "<URL>".$order_link;

либо просто привести строки 575-579 к следующему виду:

    if( VM_REGISTRATION_TYPE != 'NO_REGISTRATION' )
    {
       $order_link = "<URL>".$order_link;
       $footer_html .= "<br /><a title=\"".$VM_LANG->
       _('PHPSHOP_CHECKOUT_EMAIL_SHOPPER_HEADER5')."\"
       href=\"$order_link\">".$VM_LANG->_
       ('PHPSHOP_CHECKOUT_EMAIL_SHOPPER_HEADER5')."</a>";
    }

Вместо <URL> естественно подставляем адрес сайта.

ВОПРОС: При использовании стандартного модуля vmDrill (последовательный выбор товаров начиная от категорий товаров и заканчивая конкретными моделями) при выборе конкретной модели товара страница загружается правильная, а вот навигация сбивается. В частности получается страничка, не относящаяся ни к одному пункту меню, что приводит к неправильному отображению перечня выводимых модулей и неподсветки выбранного пункта меню.
ОТВЕТ: Это происходит из-за того, что функция генерации адреса перехода выглядит следующим образом:

    echo JRoute::_(URL.'index.php?page=shop.product_details&flypage='
    .$flypage.'&product_id='.$row['product_id'].'&category_id='.
    $row['category_id'].'&manufacturer_id='.$row['manufacturer_id'].
    '&option=com_virtuemart&Itemid='.$vmid);

При этом система неправильно определяет Itemid (в некоторых случаях оставляет его пустым) и, соответственно, Joomla не может определить к какому же собственно пункту меню относится выводимая страничка. Для решения бага нужно либо поставить статичное значение (если заведомо известно что меню сайта меняться не будет) или динамически брать его из строки запроса.
Редактировать нужно файл /modules/mod_vmdrill/helper.php, строка 104.
Также можно аналогичным образом подправить строку 134 для того, чтобы не сбивалась навигация в случае если выбирается категория и производитель, содержащие только одну позицию.

ВОПРОС: Где можно найти справочную информацию о написании шаблонов для Virtuemart?
ОТВЕТ: Шаблоны марта практически не отличаются от шаблонов джумлы, или, если уж на то пошло, обычных HTML/CSS страничек. Другой вопрос, что необходимо иметь перечень меток, вставляемых в шаблоны для вывода соответствующих элементов управления и блоков с информацией. Такой перечень меток лежит, например, здесь(по ссылке лежит наш перевод документации Viruemart)
При этом нужно заметить, что сами метки можно вставлять в код двумя методами, как указывая непосредственно имя метки в фигурных скобках (напр., {product_s_desc}), так и используя его как заранее определенную переменную (напр., echo $product_s_desc; ). Способ вставки меток определяется программистом на основании собственных предпочтений, а также ограничений, накладываемых различными версиями virtuemart. Кстати необходимо упомянуть и некоторые полезные метки, отсутствующие в вышеприведенной ссылке и найденные мною в англоязычной доке:
- $product_weight – вес продукта;
- $product_weight_uom – единица измерения веса продукта;
- $product_length, $product_width, $product_height – длина, ширина и высота продукта соответственно;
- $product_lwh_uom – единица измерения габаритов продукта.

ВОПРОС: Выборочно и непредсказуемо глючит кнопка «печать» при попытке распечатать конкретные товары и категории из марта. По нажатию на эту кнопку выбивается ошибка 404.
ОТВЕТ: Это происходит из-а неправильной ссылки, подвязанной к этой кнопке. Правильная ссылка имеет вид:
http://<URL>/shop.php?page=shop.browse&manufacturer_id=2&pop=1&tmpl=component, а привязанная ссылка – вид:

http://<URL>/index2.php?page=shop.product_details&flypage=flypage.tpl&product_id=19&category_id=7&pop=1&tmpl=component

Для решения проблемы правим файл /administrator/components/com_virtuemart/classes/htmlTools.class.php.
В строке 1007 («$link = ‘index2.php?’.$query_string.’&amp;pop=1′……») меняем index2.php на shop.php.

ВОПРОС: Как организовать добавление и вывод дополнительных картинок (больше 1) для товаров в Virtuemart.
ОТВЕТ: К такому вопросу нужно подходить одновременно с двух сторон. Во-первых, как администратору вообще «прицепить» к товару более одного изображения.
Во-вторых, как культурно организовать их отображение для пользователя интернет-магазина.
Начнем с первого. Итак, для добавления одному товару более одного изображения необходимо:
1. Зайти в админку Joomla, в меню «Компоненты», пункт Virtuemart
2. В левом меню выбрать сначала секцию «Товары», а потом собственно ее пункт – «Товары»
3. Найти необходимый товар
4. В столбце, следующим за названием товара в таблице товаров, называется «Медиа». Напротив каждого товара в нем отображается иконка и рядом с ней в скобках количество «прицпеленных» к товару картинок. По умолчанию, это 2 (поскольку при создании товара обычно задается большая картинка, которая затем масштабируется и сохраняется с другим именем). Если на эту иконку нажать, то отобразиться окно «Менеджер файлов» (правда, хитро спрятано?:)). Вот в этом-то окне и происходит выгрузка изображений на сервер, с автоматическим прикреплением их к выбранному товару.
С другой стороны, прицпленные таким образом картинки необходимо отобразить, причем отобразить не так, как предлагает Virtuemart (кинуть превьюшки всех картинок на страницу товара), а сделать аккуратную ссылочку ведующую на стандартное окно марта для просмотра множественных картинок. Я предлагаю ссылочку выводить с помощью следующего кода, вставляемого в любое удобное место шаблона отображения товара (flypage.tpl.php):

    <?php if(count($images) > 0)
    { ?>
    <a href="/index2.php?page=shop.view_images&amp;flypage=flypage_new.tpl
    &amp;product_id=<?php echo $product_id; ?>&amp;category_id=&amp;pop=1
    &amp;option=com_virtuemart&amp;Itemid=18" onclick="void window.open
    ('index2.php?page=shop.view_images&amp;flypage=flypage_new.tpl&amp;
    product_id=<?php echo $product_id; ?>&amp;category_id=&amp;pop=1&amp
    ;option=com_virtuemart&amp;Itemid=18', '_blank', 'status=no,toolbar=no,
    scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,
    height=550,directories=no,location=no,screenX=100,screenY=100');
    return false;">
    <?php echo $VM_LANG->_('PHPSHOP_MORE_IMAGES').' ('.count($images).')';
     ?></a>
    <?php } ?>

В результате работы такого кода ссылочка на просмотр дополнительных картинок появится только в том случае, если они добавлены для данного товара, а, при щелчке, отправит пользователя на стандартное средство просмотра картинок, тоже настроенное соответствующим образом.

ВОПРОС: Каким образом можно заменить стандартный Lightbox, входящий в поставку Joomla, на что-нибудь другое, например Highslide. И, в частности, потом заставить работать Highslide для отображения картинок в Virtuemart?
ОТВЕТ: Теоретически, для установки highslide для Joomla существует плагин (ну, или в старых терминах – мамбот). Со слов разработчиков, после его установки и включения он в реальном времени будет обрабатывать rel=»lightbox» и открывать highslide вместо встроенного lightbox. Однако шото воно не работает
Поэтому в последней работы было решено прикрутить highslide «руками». Для этого необходимо сделать следующее:
1. Скачать последнюю версию дистрибутива Highslide, распаковать, скопировать папку highslide в корневую директорию сайта.
2. В шаблон в секцию <head></head> вставить строчки:
<script type=»text/javascript» src=»http://<URL>/highslide/highslide.js»></script>
<link rel=»stylesheet» type=»text/css» href=»http://<URL>/highslide/highslide.css» />
3. В файле /administrator/components/com_virtuemart/classes/htmlTools.class.php ищем строку 904 («$link = vmCommonHTML::hyperLink( $image_link,…..») и приводим ее к следующему виду:

    $link = vmCommonHTML::hyperLink( $image_link, $text, '', $title,
    'class="highslide" onclick="return hs.expand(this)"' );

Этим мы заставим открывать картинки в highslide со странички просмотра товара (flypage.tpl.php)
4.Далее правим те файлы, которые отвечают за отображение категории товара. У меня были задействованы файлы browse_1.php, browse_2.php, browse_3.php. В общем случае в них нужно заменить код, отвечающий за вывод картинки на следующий:

    <div class="browseProductImageContainer">
    <a href="<?php echo $product_full_image ?>" class="highslide"
    onclick="return hs.expand(this)">
    <?php echo ps_product::image_tag( $product_thumb_image,
    'class="highslide" border="0" title="'.$product_name.'"
    alt="'.$product_name .'"' ) ?></a></div>

После проверки успешной работы Highslide можно настроить его параметры (вроде показывать ли копирайт разработчика, размеры окна и т.д.) в файле /highslide/highslide.js.

ВОПРОС: Модуль mod_virtuemart_s5_dropdown_cart не проверяет существует ли файл картинки, указанный в базе данных и часто тупо выводит несуществующие картинки. Хотелось бы это поправить…
ОТВЕТ: Для решения этой ситуации нужно отредактировать строки 266 – 275 (<center><a><img></a></center>) файла /modules/mod_virtuemart_s5_dropdown_cart/minicart.tpl.php, «посадив» их в условный цикл. В результате получится что-то вроде этого:

    <?
    $filename = "components/com_virtuemart/shop_image/product/".
    $cart['product_thumb_image'];
    if (file_exists($filename) && $cart['product_thumb_image'] != "")
    { ?>
    <center>
    <a href="<?php echo $cart['url'] ?>">
    <img src="components/com_virtuemart/shop_image/product/<?php echo
    $cart['product_thumb_image'] ?>" alt="" border="0" height="90"/>
    </a>
    </center>
    <? } ?>

ВОПРОС: Модуль mod_s5_quick_contact присылает письма в неправильной кодировке
ОТВЕТ: Этот модуль разработан на западе и отправляет письма в UTF8. Для того, чтобы полноценно заставить его говорить по русски необходимо в строке 11 вставить объявление функции Utf8ToWin (текст которой приводиться ниже), а после строк 70, 77, 81 вставить соответственно вызовы этой функции: $name = Utf8ToWin($name); $message = Utf8ToWin($message); $subject = Utf8ToWin($subject);. Все манипуляции проводяться над файлом /modules/mod_s5_quick_contact/mod_s5_quick_contact.php. Текст функции:

    function Utf8ToWin($fcontents) {
    $out = $c1 = '';
    $byte2 = false;
    for ($c = 0;$c < strlen($fcontents);$c++) {
    $i = ord($fcontents[$c]);
    if ($i <= 127) {
    $out .= $fcontents[$c];
    }
    if ($byte2) {
    $new_c2 = ($c1 & 3) * 64 + ($i & 63);
    $new_c1 = ($c1 >> 2) & 5;
    $new_i = $new_c1 * 256 + $new_c2;
    if ($new_i == 1025) {
    $out_i = 168;
    } else {
    if ($new_i == 1105) {
    $out_i = 184;
    } else {
    $out_i = $new_i - 848;
    }
    }
    // UKRAINIAN fix
    switch ($out_i){
    case 262: $out_i=179;break;// і
    case 182: $out_i=178;break;// І
    case 260: $out_i=186;break;// є
    case 180: $out_i=170;break;// Є
    case 263: $out_i=191;break;// ї
    case 183: $out_i=175;break;// Ї
    case 321: $out_i=180;break;// ґ
    case 320: $out_i=165;break;// Ґ
    }
    $out .= chr($out_i);

    $byte2 = false;
    }
    if ( ( $i >> 5) == 6) {
    $c1 = $i;
    $byte2 = true;
    }
    }
    return $out;
    }

UPD.: Уже поправленный текст файла можно скачать здесь: mod_s5_quick_contact.php

Метки: Joomla, PHP без CMS, Virtuemart

Комментирование временно закрыто.

Поиск по сайтам Kherson Development Team (gelos.org.ua, kdt.biz.ua), в том числе и по комментам.

Copyright © 2006-2010 Kherson Development Team. All rights reserved.