Автор Тема: Меняем функционал для отслеживания почтовых посылок  (Прочитано 19369 раз)

Sicilla

  • Гость
Решил выделить, так как сделал довольно удобно.
1) Добавляем строку в таблицу БД с помощью SQL-запроса
Цитировать
alter table SS_orders add column `tracking` varchar(20) not null default '';
В принципе я взял с запасом, так-то надо 14.

2) Нам надо привязать номер почтового отправления к конкретному заказу. Открываем файл core/admin_tmpl/custord_edit_orders.tpl.html. Правим его:
Цитировать
   
<tr>
 
<td>Номер почтового отправления:</td>
<td><input value="{$orderinfo.tracking}" name="shipping[tracking]" maxlength="20">
</td>
</tr>
Это примерно строка 272 будет.
3) теперь нам хочется что бы он отображался в админке в разделе новые заказы. Для этого надо исправить SQL-запрос в файле includes/admin/sub/custord_new_orders.php строка 46.
Цитировать
   if (($_SESSION["access"] == 1) && ($_SESSION["manager_id"])) {$q = db_query("SELECT orderID, order_time, cust_firstname, cust_lastname, cust_email, cust_country, cust_zip, cust_state, cust_city, cust_address, cust_phone, status, comment, tracking FROM ".ORDERS_TABLE." WHERE manager='".$_SESSION["manager_id"]."' ORDER BY order_time DESC") or die (db_error());}
   else
   if ($_SESSION["access"] > 1) {$q = db_query("SELECT orderID, order_time, cust_firstname, cust_lastname, cust_email, cust_country, cust_zip, cust_state, cust_city, cust_address, cust_phone, status, comment, tracking FROM ".ORDERS_TABLE." ORDER BY order_time DESC") or die (db_error());}
Далее правим файл core/admin_tmpl/custord_new_orders.tpl.html (привожу полность. Менять весь)
Цитировать
{* new orders list *}

<div class="heading">
  <h1>{$smarty.const.ADMIN_NEW_ORDERS}</h1>
</div>
  <p/>
  <font color="#f00">*</font>{$smarty.const.ADMIN_ABOUT_PRICES}
  </p>

  <table class="list" cellspacing="0">
    <tr class="odd">
      <td class="left" width="1px"><b>{$smarty.const.STRING_ORDER_ID}</b></td>
      <td class="left" width="1px"><b>{$smarty.const.TABLE_CUSTOMER}</b></td>
      <td class="left" width="1px"><b>{$smarty.const.STRING_CONTACT_INFORMATION}</b></td>
      <td class="left"><b>{$smarty.const.TABLE_ORDERED_PRODUCTS}</b></td>
      <td class="left" width="1px"><b>{$smarty.const.TABLE_ORDER_TOTAL}</b></td>
      <td class="left" width="1px"><b>{$smarty.const.TABLE_ORDER_TIME}</b></td>
      <td class="left" width="1px"><b>№ отправления</b></td>
      <td class="left">&nbsp;</td>
    </tr>

{if $new_order_count ne 0}
{section name=i loop=$orders}
    <tr class="{if $smarty.section.i.index is div by 2}even{/if}">
      <td class="left">{$orders[0]}</td>
      <td class="left">{$orders[2]} {$orders[3]}</td>
      <td class="left">
   {$orders[10]}<br /><br />
   {$orders[9]}<br>{$orders[8]} {$orders[7]} {$orders[6]}<br>{$orders[5]}
   <a href="mailto:{$orders[4]}">{$orders[4]}</a>
      </td>
      <td class="left">{$orders[11]}</td>
      <td class="left"><b>{$orders[12]}</b></td>
      <td class="left">{$orders[1]}</td>
      <td class="left">{$orders[13]}</td>     
   <td class="left">
   <a href="./admin.php?dpt=custord&sub=edit_orders&orderID={$orders[0]}" title="{$smarty.const.ADMIN_EDIT}"><img alt="" src="./images/backend/edit.png"></a><br>
  <a href="./core/print_tov.php?orderid={$orders[0]}" target="_blank" onClick="popupWin = window.open(this.href, 'Torg 12', 'status=1'); popupWin.focus(); return false;" title="{$smarty.const.ADMIN_ORDER_TOV}"><img src="./images/backend/tov.png" alt="{$smarty.const.ADMIN_ORDER_TOV}"></a><br>
   <a href="./core/print_torg12.php?orderid={$orders[0]}" target="_blank" onClick="popupWin = window.open(this.href, 'Torg 12', 'status=1'); popupWin.focus(); return false;" title="{$smarty.const.ADMIN_ORDER_T12}"><img src="./images/backend/t12.png" alt="{$smarty.const.ADMIN_ORDER_T12}"></a>   
   <a href="admin.php?dpt=custord&sub=new_orders&orderid={$orders[0]}&complite"><img src="./images/backend/complite.png" title="{$smarty.const.ADMIN_ORDER_COMPLITE}"/></a><br>
      <a href="javascript:confirmDelete({$orders[0]},'{$smarty.const.QUESTION_DELETE_CONFIRMATION}','admin.php?dpt=custord&sub=new_orders&delete=');"><img src="./images/backend/delete.png" alt="{$smarty.const.CANCEL_BUTTON}"></a>
      </td>
    </tr>
   
{/section}
{else}
    <tr>
      <td colspan="7">&nbsp;</td>
    </tr>
    <tr class="even">
      <td colspan="7"><b>{$smarty.const.STRING_NO_ORDERS}</b></td>
    </tr>
{/if}
  </table>
4) Теперь нам надо сделать оторжение номера почтового перевода для человека. Для начала изменим SQL-запрос в файле includes/order_history.php. (Строка 20)
Цитировать
     $order_history=db_arAll("select `order`.`orderID` orderID, `order`.`order_time` order_time, status, sum(Price*Quantity) summ, tracking from ".ORDERS_TABLE." as `order` LEFT JOIN ".ORDERED_CARTS_TABLE." as `order_car` USING ( `orderID` ) where `order`.`custID`=".(int)$_SESSION["cust_id"]." and name not like '".ADMIN_DISCOUNT_STRING." %' group by `order`.`orderID`");
Далее правим файл css/css_default_full/theme/order_history.tpl.html (привожу полность).
Цитировать
<div class="top"><h1>{$meta_title}</h1></div>
<div class="middle">

{if $order_history}
 <table width="100%" class='cart' cellspacing="0" cellpadding="4">
  <tr>
   <th><b>{$smarty.const.ADMIN_PRODUCT_NAME}<b></th>
   <th><b>{$smarty.const.TABLE_PRODUCT_COST}</b></th>
   <th><b>{$smarty.const.TABLE_PRODUCT_QUANTITY}</b></th>
   <th><b>{$smarty.const.TABLE_PRODUCT_SUMM}</b></th>
  </tr>
{foreach name=horder from=$order_history item=order}
  <tr {if $smarty.foreach.horder.index is even}class="row_odd"{/if}>
   <th>{$order.name}</th>
   <th>{$smarty.const.CONF_CURRENCY_ID_LEFT}{$order.Price|print_price}{$smarty.const.CONF_CURRENCY_ID_RIGHT}</th>
   <th>{$order.Quantity}</th>
   <th>{math assign="total" equation="x * y" x=$order.Price y=$order.Quantity}{$smarty.const.CONF_CURRENCY_ID_LEFT}{$total|print_price}{$smarty.const.CONF_CURRENCY_ID_RIGHT}</th>
  </tr>
{/foreach}
 </table>
{elseif $history}
<table width="100%" class='cart' cellspacing="0" cellpadding="6">
<tr>
  <th><center><b>{$smarty.const.STRING_ORDER_ID}<b></center></th>
  <th><center><b>{$smarty.const.TABLE_ORDER_TIME}</b></center></th>
  <th><center><b>{$smarty.const.TABLE_ORDER_TOTAL}</b></center></th>
  <th><center><b>№ почтового отправления</b></center></th>

</tr>
{foreach name=horder from=$history item=order}
   <tr {if $smarty.foreach.horder.index is not even}class="row_odd"{/if}>
    <td><center><a href="./index.php?order_history=1&orderid={$order.orderID}">{$order.orderID}</a></center></td>
    <td><center>{$order.order_time}</center></td>
    <td><center>{$order.summ}</center></td>
    <td><center><a href="http://info.russianpost.ru/servlet/post_item?action=search&barCode={$order.tracking}" target="_blank">{$order.tracking}</a></center></td>
   </tr>
</center>
{/foreach}
</table>
{else}
Заказов нет.
{/if}
</div>

Всё. Теперь человек лего может определить местоположение своей посылки

Огромное спасибо Олегу Тимшину

[вложение удалено администратором]
« Последнее редактирование: Июня 09, 2012, 08:48:45 am от Sicilla »

Sicilla

  • Гость
Если кому-то надо продолжения доработки, скажите, а то времени нет совсем. Доработал вот как: см.вложение. Номер перевода - ссылка. При нажатии переход на сайт почты России и поиск данного кода

[вложение удалено администратором]

Оффлайн pizhama

  • Пользователь
  • **
  • Сообщений: 61
    • Просмотр профиля
Идея очень хорошая. А как быть если отправляешь несколькими службами доставки, например у меня их 5 штук. Можно ли как-то сделать выбор (радиобатонами) и вписывать номер отслеживания каждой конкретной курьерской компании?

Sicilla

  • Гость
Если тупо глупо и быстро - то пять полей сделать, и собственно выводить человеку информацию по всем компаниям. Можно конечно при выводе показывать только те поля тех фирм доставок, которые заполнены

Оффлайн pizhama

  • Пользователь
  • **
  • Сообщений: 61
    • Просмотр профиля
Ага, я пробовал, но заткнулся а том, как писать в базу, а потом вызывать оттуда :) Знаний не хватает

Sicilla

  • Гость
Цитировать
alter table SS_orders add column `tracking1` varchar(20) not null default '';
alter table SS_orders add column `tracking2` varchar(20) not null default '';
alter table SS_orders add column `tracking3` varchar(20) not null default '';
alter table SS_orders add column `tracking4` varchar(20) not null default '';
alter table SS_orders add column `tracking5` varchar(20) not null default '';
А потом по аналогии в запросах sql
[qoute]
$order_history=db_arAll("select `order`.`orderID` orderID, `order`.`order_time` order_time, status, sum(Price*Quantity) summ, tracking1, tracking2, tracking3, tracking4, tracking5 from ".ORDERS_TABLE." as `order` LEFT JOIN ".ORDERED_CARTS_TABLE." as `order_car` USING ( `orderID` ) where `order`.`custID`=".(int)$_SESSION["cust_id"]." and name not like '".ADMIN_DISCOUNT_STRING." %' group by `order`.`orderID`");
[/qoute]

Оффлайн pizhama

  • Пользователь
  • **
  • Сообщений: 61
    • Просмотр профиля
Спасибо!

Оффлайн rom1

  • Спец
  • ***
  • Сообщений: 136
    • Просмотр профиля
Отличная доработка, можете дать инфу, как реализованы ссылки с переходами?

Sicilla

  • Гость
css/css_default_full/theme/order_history.tpl.html вот ссылки здесь указаны, а сам текст этого файла чуть выше, он в самом конце первого поста

Оффлайн rom1

  • Спец
  • ***
  • Сообщений: 136
    • Просмотр профиля
Вот такой глюк после установки.
Перепроверил 3 раза - всё правил корректно.
Что может быть не так?

[вложение удалено администратором]

Оффлайн rom1

  • Спец
  • ***
  • Сообщений: 136
    • Просмотр профиля
Обнаружил сильные несостыковки в файле core/admin_tmpl/custord_new_orders.tpl.html относиельно исходного файла сборки.

В чистом 5.0.2
вот это $orders[0] выглядит так $orders[i][0]

Везде поменял переменные на старый вид (добавил i). Заработало.
Перестала работать кнопка выполнения заказа. Просто ничего не происходит при нажатии.
« Последнее редактирование: Июля 20, 2012, 04:35:39 pm от slamm™ »

Оффлайн rom1

  • Спец
  • ***
  • Сообщений: 136
    • Просмотр профиля
Забавно, если я у вас на форуме пишу последовательность: открывающаяся квадратная скобка, i, закрывающая, открывающая,2,
закрывающая.

То в итоге на экране вот так: [i][2]

Я так понимаю, это тег курсива портит весь код (
« Последнее редактирование: Июля 20, 2012, 04:36:14 pm от slamm™ »

Оффлайн rom1

  • Спец
  • ***
  • Сообщений: 136
    • Просмотр профиля
После исправления всё работает.
Кто будет ставить - обращайте внимание на курсив (

Админ -> Используйте форматирование текста и особенно кода!
« Последнее редактирование: Июля 20, 2012, 04:38:28 pm от slamm™ »

Sicilla

  • Гость
Странно, но вот эти кавычки я не трогал и у меня работает как и написано в самом начале. Или я чего-то недопонимаю.
Или вы уже правили как-то раньше, что идёт не так синтаксис
« Последнее редактирование: Июля 23, 2012, 11:29:55 am от Sicilla »

Оффлайн rom1

  • Спец
  • ***
  • Сообщений: 136
    • Просмотр профиля
Вы неправильно поняли, движок форума воспринял i-элемент массива заключенный в квадратные скобки как тэг курсива, поэтому
при копировании кода эти части потерялись.

Т.е. код работоспособен, но отображается на форуме некорректно.