Изначально задача была поставлена весьма просто:
функции управления заказами (просмотр, создание, правка, удаление) нужно было передать другому пользователю USER1 в процессе её реализации решено было также:
сделать интерфейс (внешний вид) управления заказами более дружелюбным (о чём далее...).
Итак, сегодня рассмотрю вопросы:
- Передача прав помощнику админа по заказам;
- Уведомление помощнику о поступившем заказе
- Добавляем фото товаров в уведомление
- Изменение внешнего вида управления заказом:
- Возвращаем исчезнувшие со страницы закладки
- Восстанавливаем часть русского перевода
- Ускорение отображения информации о заказе (если у Вас от 1 до 10 тысяч товаров (или больше)
- Дружелюбный интерфейс.
- Скрываем стоимость нулевой доставки в развернутом описании покупательского заказа
и многое другое! :-) (шутка, пока только это)
Раздача прав.Поскольку мне непонятно как связаны у встроенных групп пользователей, н/р storeadmin, уровень (от 0 до 750) и их права, решено было не заморачиваться со встроенными группами, а создать новую группу orderadmin с самым низким уровнем доступа 1000 (VirtueMart->Настройки->Группы пользователей).
Далее переводим USER1 в упомянутую группу (VirtueMart->Настройки->Пользователи).
Теперь переходим в "раздачу полномочий" пользователям (VirtueMart->Настройки->Список модулей) и слева-направо видим группы пользователей admin, storeadmin, orderadmin, shopper, demo и none, а сверху вниз модули.
Ставим галочку на пересечении
orderadmin и
order и на пересечении
account и
order, нажимаем вверху
Сохранить разрешения (возле значка дискеты).
Далее нажимаем на "
Список функций" в строке
order и ставим галочки на пересечении всех перечисленных сверху вниз функций и столбца с заголовком
orderadmin (кроме первой функции, по аналогии с правами для
admin и
storeadmin). Жмём
Сохранить разрешения.
Далее нажимаем на "
Список функций" в строке
shopper и ставим галочку на пересечении
shopperUpdate и
orderadmin. Жмём
Сохранить разрешения.
Всё. Теперь у пользователя будут все возможные права на управление заказами, а также права простого покупателя.
_____
Если Вы желаете передать пользователю только часть прав, предлагаю поэксперементировать с правами на функции самостоятельно. :-) Например, orderStatusSet позволяет пользователю менять статус заказа.Внимание!
Если Вы переименуете созданную группу orderadmin, например в orderadmin1, то необходимо перевести Вашего пользователя в эту группу заново (VirtueMart->Настройки->Пользователи), иначе у Вашего пользователя появятся права на доступ не только к заказам, но и к любым другим функциям в магазине!!Уведомление помощнику о поступившем заказеПрава мы помощнику дали... а как быть с уведомлением его о новых заказах? Пересылать по почте вручную или через настройки почтового сервера не вариант! Решено было "внедрить" свой код в магазин... Делается это просто, в файле
administrator/components/com_virtuemart/classes/ps_checkout,php находим строчку
$vendor_email = $from_email;
и меняем её на
$vendor_email = array($from_email,'a@b.c');
где вместо a@b.c подставляем адрес электронной почты помощника. Всё! Теперь письма о поступившем заказе будут присылаться в 2 адреса: хозяина магазина (задаётся в настройках сайта: Virtuemart->Магазин->Информация о магазине) и на указаный Вами e-mail помощника.
Добавляем фото товаров в уведомление... на заказ. :-)
Переходим к внешнему виду управления заказом.Ссылка для управления заказами для USER1 будет выглядеть следующим образом:
http://{Ваш сайт}/index2.php?index2.php?pshop_mode=admin&page=order.order_list&option=com_virtuemartПопробуйте щёлкнуть на любой заказ и Вы поймёте, что хотя управление реализовано довольно функционально и вроде много чего есть, но интерфейс крайне неудобный! Куча нагромождений каких-то панелей, кнопок, полей, окон, расположенных в хаотичном порядке, но Главное! - непонятно как из окна просмотра заказа возвращаться обратно к списку заказов.
Попробуем привести это в более удобный вид...
Первая проблема. Куда делись закладки? Как оказалось, если администрировать заказы из панели администратора в самой Joomla, то в самом верху страницы описания каждого заказа мы видим панель с симпатичными закладками. А если же зайти в режиме пользователя USER1 по указанному выше адресу, то панель куда-то исчезает и то что должно быть в закладках - тупо размещено одно под другим.
Я не буду выяснять почему здесь не подгрузились нужные скрипты, а изложу решение:
В файле administrator/components/com_virtuemart/classes/htmlTools.class.php
Нужно в код, начинающийся со строки 388:
function vmTabPanel($useCookies, $show_js, $panel_id) {
vmCommonHTML::loadExtjs();
$this->useCookies = $useCookies;
$this->panel_id = $panel_id;
$this->tabs = array();
}
Вставить одну строку, а именно:
function vmTabPanel($useCookies, $show_js, $panel_id) {
vmCommonHTML::loadExtjs();
vmCommonHTML::loadMooTools();
$this->useCookies = $useCookies;
$this->panel_id = $panel_id;
$this->tabs = array();
}
Вcё! функция loadMooTools() чудесным образом вставляет в код страницы ссылки на все отсутствующие, но необходимые JavaScript-библиотеки, после чего броузер их благополучно подгружает.
Вторая проблема. Куда делась часть русского перевода?Почему-то при переводе содержимого английских языковых файлов для русскоязычной аудитории потерялась целая часть языкового файла для заказов. Чтобы её восстановить открываем файл administrator/components/com_virtuemart/languages/order/russian.php и в конец перед
); $VM_LANG->initModule( 'order', $langvars );
добавляем строки:
,'PHPSHOP_ORDER_EDIT_ACTIONS' => 'Действия',
'PHPSHOP_ORDER_EDIT' => 'Изменить детали заказа',
'PHPSHOP_ORDER_EDIT_ADD' => 'Добавить',
'PHPSHOP_ORDER_EDIT_ADD_PRODUCT' => 'Добавить товар',
'PHPSHOP_ORDER_EDIT_EDIT_ORDER' => 'Изменить заказ',
'PHPSHOP_ORDER_EDIT_ERROR_QUANTITY_MUST_BE_HIGHER_THAN_0' => 'Количество должно быть больше 0.',
'PHPSHOP_ORDER_EDIT_PRODUCT_ADDED' => 'Товар добавлен к заказу',
'PHPSHOP_ORDER_EDIT_PRODUCT_DELETED' => 'Товар был удалён из заказа',
'PHPSHOP_ORDER_EDIT_QUANTITY_UPDATED' => 'Количество обновлено',
'PHPSHOP_ORDER_EDIT_RETURN_PARENTS' => 'Назад к родительскому товару',
'PHPSHOP_ORDER_EDIT_CHOOSE_PRODUCT' => 'Выберите товар',
'PHPSHOP_ORDER_CHANGE_UPD_BILL' => 'Изменить плательщика',
'PHPSHOP_ORDER_CHANGE_UPD_SHIP' => 'Изменить адрес доставки',
'PHPSHOP_ORDER_EDIT_SOMETHING_HAS_CHANGED' => ' изменён',
'PHPSHOP_ORDER_EDIT_CHOOSE_PRODUCT_BY_SKU' => 'Выберете артикул'
Обратите внимание на запятую в начале добавляемого кода.
Третья проблема. Если у Вас от 1 до 10 тысяч товаров (или больше)Не знаю можно ли называть это проблемой, если у Вас список товаров содержит лишь десятки позиций, но когда их количество приближается к десяти тысячам, обновления информации о заказе приходится ждать до 10 секунд и более, что напрягает.
Оказалось, что каждый раз когда обновляется информация о Вашем заказе (выбрали его в списке, обновили статус, цены, плательщика и т.п.), обновляются и два поля внизу списка заказанных покупателем товаров:
Список артикулов товаров и
Список сокращённых наименований товаров!
Они находятся под списком заказанных товаров и нужны, если Вы вдруг захотите самостоятельно добавить товар к списку уже заказанных покупателем товаров. Согласитесь, что если это и нужно, то далеко не всегда.
Решено было вынести этот код в отдельный "смысловой блок" (окно), чтобы он не загружался каждый раз.
Пришлось внести изменения в файл: administrator/components/com_virtuemart/classes/ps_order_change_html.php
Была добавлена переменная "mdfpd", приравнивая которую к 1 мы давали понять, что работаем только с кодом выбора товара для добавления.
Это реализовывается следующим образом...
Cо строки 360 начинается код функции:
function html_change_add_item()
там 4 раза повторяется код
<input type="hidden" name="page" value="order.order_print" />
<input type="hidden" name="option" value="com_virtuemart" />
<input type="hidden" name="func" value="" />
В 4й раз этот код принадлежит форме с кнопкой, отвечающей непосредственно за добавление товара к списку товаров.
Его мы трогать не будем.
А вот в первые 3 раза (выбрали имя товара, выбрали артикул или нажали "вернуться к родительскому товару") мы добавим к коду одну строчку, т.е. код пример вид:
<input type="hidden" name="page" value="order.order_print" />
<input type="hidden" name="option" value="com_virtuemart" />
<input type="hidden" name="func" value="" />
<input type="hidden" name="mdfpd" value="1" />
Тем самым давая понять серверу, что в каждом из 3х случаев мы желаем остаться в режиме выбора добавляемого товара. Добавлять товар к покупательскому списку ещё рано!
Итак... С проблемами на этом было покончено... :-)
Дружелюбный интерфейс.Теперь переходим к файлу administrator/components/com_virtuemart/html/order.order_print.php в котором и содержится отображение подробной информации о заказе (если щёлкнуть на каком-либо заказе в списке заказов).
Я не буду подробно объяснять какой код в этом файле выполняет какие функции (при желании Вы можете в этом разобраться и сами), а только приложу свой вариант этого файла. Можете заменить и посмотреть с каким из них Вам удобнее работать. (Не забудьте сохранить на всякий случай старую версию файла! Вдруг Вам новая не понравится).
Что не понравилось, и что изменил конкретно:
- От нагромождения элементов постарался избавиться путём размещения их по закладкам, объединив в смысловые группы.
- Вверху добавил отображение номера заказа в поле, а рядом - кнопку для возможности перехода к произвольному заказу по его номеру.
- В истории изменения заказов добавил к шифру типа состояния заказа его сокращённое наименование (полное описание добавил во всплывающую подсказку).
- Вынес код выбора добавляемых товаров в отдельный смысловой блок (о чём писал выше).
- Есть и другие мелкие "улучшения"... (на мой взгляд).
Скрываем стоимость нулевой доставки в развёрнутом описании заказаПозволю себе небольшое отступление. Все представляют процесс оформления заказа покупателем. Он состоит из нескольких шагов: выберите способ оплаты, доставки, адрес (или наоборот). Последовательность шагов задаётся в Настройках магазина на закладке "Оформление заказа".
Когда покупатель оформляет заказ, на каждом шаге выводится табличка с полным перечнем заказанных товаров, их стоимостью, а также стоимостью доставки, величиной налога и т.п. Лично мне не кажется лишней строка:
Стоимость доставки и плата за отгрузку: 0 руб.
Так будет, если покупатель выбрал "самовывоз", например (уверен у большинства такой вариант присутствует). Решено было эту строку скрыть.
Во, первых, во всех 4х файлах в папке components/com_virtuemart/templates/basket/ нужно заменить код:
на
if(( $shipping ) && (round( $ps_checkout->_SHIPPING->get_rate ( $vars ), 5 ) > 0)) { ?>
Во-вторых, в файле components/com_virtuemart/templates/pages/basket_b2c нужно заменить код:
<tr>
<td colspan="4" align="right"><?php echo $VM_LANG->_('PHPSHOP_ORDER_PRINT_SHIPPING')?> :</td>
<td align="right"><?php
$shipping_total = $db->f("order_shipping");
if ($auth["show_price_including_tax"] == 1)
$shipping_total += $db->f("order_shipping_tax");
echo $CURRENCY_DISPLAY->getFullValue($shipping_total, '', $db->f('order_currency'));
?> </td>
</tr>
на
<?php
$shipping_total = $db->f("order_shipping");
if ($shipping_total > 0) {
?>
<tr>
<td colspan="4" align="right"><?php echo $VM_LANG->_('PHPSHOP_ORDER_PRINT_SHIPPING')?> :</td>
<td align="right"><?php
if ($auth["show_price_including_tax"] == 1)
$shipping_total += $db->f("order_shipping_tax");
echo $CURRENCY_DISPLAY->getFullValue($shipping_total, '', $db->f('order_currency'));
?> </td>
</tr>
<?php
}
?>
Ну и наконец, в третьих, подкорректируем е-майл уведомление в файле components/com_virtuemart/templates/order_emails/confirmation_email.tpl.php
<tr class="Stil1">
<td colspan=4 align=right><?php echo $VM_LANG->_('PHPSHOP_ORDER_PRINT_SHIPPING')?> :</td>
<td><?php echo $order_shipping ?></td>
</tr>
на
<?php
$shipping_total = $db->f("order_shipping");
if ($shipping_total > 0) {
?>
<tr class="Stil1">
<td colspan=4 align=right><?php echo $VM_LANG->_('PHPSHOP_ORDER_PRINT_SHIPPING')?> :</td>
<td><?php echo $order_shipping ?></td>
</tr>
<?php
}
?>
_______
Возможно, что вариант не последний... и по мере возникновения проблем или потребностей файл будет подвергаться корректировке. Новую версию выложу в этой теме.P.S. Давайте делать Интернет вместе.
[вложение удалено Администратором]