Решение данной задачи было найдено самостоятельно, методом проб и ошибок. Хочу поделиться, может кому пригодится. (Версия VirtueMart 2.0.26d, Joomla 2.5.19 , PHP 5.2.12)
Для чтения данных из текстового поля и передачи их в PHP для записи в БД я использовал Javascript (Ajax), поэтому данная процедура происходит без перезагрузки страницы.
Делаем следующее:
1) Создаём в БД в таблице virtuemart_orders колонку с именем tracking_number (я задал тип как текст)
2) Заходим в файл order.php (administrator\components\com_virtuemart\views\orders\tmpl)
3) Переходим примерно на 330 строку и после:
<?php
foreach($shipments as $shipment) {
if($shipment->virtuemart_shipmentmethod_id == $this->orderbt->virtuemart_shipmentmethod_id) echo $shipment->shipment_name;
}
?>
</td>
</tr>
Вставляем следующие строки:
<tr>
<td><?php echo JText::_ ('Tracking Number') ?>
<td>
<?php //Получаем существующее значение Трекинг номера из БД
$db = JFactory::getDBO();
$query = 'SELECT `tracking_number` from `#__virtuemart_orders` WHERE `virtuemart_order_id`= "'.$this->orderbt->virtuemart_order_id.'"';
$db->setQuery($query);
$get_track = $db->loadResult();
?>
<script language="JavaScript" type="text/javascript">
function get_track_number(){
var track_num = document.getElementById('track').value; //Получаем введёный текст
var track_id = '<?php echo $this->orderbt->virtuemart_order_id ?>'; //Получаем ID заказа
var track_num_saved = '<?php echo $get_track ?>'; //Получаем существующее значение Трекинг номера
if (window.XMLHttpRequest) {
xmlhttp=new XMLHttpRequest();
}
else {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
if(track_num == "") {
alert("Please input tracking number");
}
else if(track_num == track_num_saved){
alert("Tracking number hasn't changed. Please make a change");
}
else{
xmlhttp.open("GET","../t_num.php?track_number=" + track_num + "&tracking_id=" + track_id, true); //Передаём значение в PHP файл
xmlhttp.send();
alert("Data Updated Successfully. Tracking Number for this order is: " + track_num);
}
}
</script>
<input type="text" name="track" id="track" value="<?php
//Если значение текстового поля не пустое, делаем вывод
if(!$get_track == NULL)
echo $get_track;
else
echo "Ther is no tracking data";
?>"/>
<!--При нажатии кнопки вызываем функцию Javascript -->
<input type="button" name="submit" id="submit" value="update" onclick="get_track_number()">
</td>
</td>
</tr>
4) Создаём в корне сайта файл t_num.php и вставляем в него следующий код:
<?php
define('_JEXEC', 1);
define('JPATH_BASE', dirname(__FILE__)); //файл лежит в корне, иначе меняйте пути
define('DS', DIRECTORY_SEPARATOR);
header('Content-Type: text/html; charset=utf-8');
require_once(JPATH_BASE . DS . 'includes' . DS . 'defines.php');
require_once(JPATH_BASE . DS . 'includes' . DS . 'framework.php');
jimport('joomla.database.table');
$app = JFactory::getApplication('administrator'); //для фронта site
$app->initialise();
//Получаем значение текстового поля и id заказа из order.php
$input = JFactory::getApplication()->input;
$track_number = $input->get('track_number', '', 'string');
$order_id = $input->get('tracking_id', '', 'string');
if(!$track_number == NULL){ //Проверяем если полученое значение не пустое
//Записываем полученый результат в БД
$db = JFactory::getDBO();
$query= " UPDATE #__virtuemart_orders SET ".$db->nameQuote('tracking_number')."=". $db->Quote($track_number)." WHERE ".$db->nameQuote('virtuemart_order_id')." = ". $db->Quote($order_id);
$db->setQuery($query);
$db->query();
}
?>
5) Выводим Трекин номер заказа в деталях заказа покупателя (во Frontend). Открываем файл details_order.php расположенный в \templates\ваш_шаблон\html\com_virtuemart\orders
И вставляем в него код:
<?php foreach($this->orderdetails['details'] as $_details); //Проверяем, если заказ находится в статусе отправлен (Код статуса заказа ОТПРАВЛЕН должен быть S)
if($_details->order_status == "S"): ?>
<tr>
<td class=""><?php echo JText::_('COM_VIRTUEMART_TRACKING_SHORT')?></td>
<td align="left"><?php
//Получаем значение из БД
$db = JFactory::getDBO();
$query = 'SELECT `tracking_number` from `#__virtuemart_orders` WHERE `virtuemart_order_id`= "'.$_details->virtuemart_order_id.'"';
$db->setQuery($query);
$result = $db->loadResult();
if(!$result == NULL)
echo $result;
else
echo "Ther is no tracking data";
?>
</td>
</tr>
<?php endif; ?>
6) Теперь отображаем Трекин номер в списке заказов со стороны администратора (в Backend). Таким образом:
https://cloud.mail.ru/public/DAei/9UASEsdXnОткрываем файл orders.php который находится в administrator\components\com_virtuemart\views\orders\tmpl
Переходим примерно на 140 строку и вставляем после:
<textarea class="element-hidden vm-order_comment vm-showable" name="orders[<?php echo $order->virtuemart_order_id; ?>][comments]" cols="15" rows="1"></textarea>
<?php echo JHTML::_ ('link', '#', JText::_ ('COM_VIRTUEMART_ADD_COMMENT'), array('class' => 'show_comment')); ?>
</td>
<!-- Update -->
Следующий код:
<td>
<input type="text" disabled="disabled" style="text-align:center" value="<?php
$db = JFactory::getDBO();
$query = 'SELECT `tracking_number` from `#__virtuemart_orders` WHERE `virtuemart_order_id`= "'.$order->virtuemart_order_id.'"';
$db->setQuery($query);
$result = $db->loadResult();
if(!$result == NULL)
echo $result;
else
echo "Ther is no tracking data";
?>" />
</td>
А также, в том же файле примерно на 51 строке, после:
<th><?php echo $this->sort ('order_status', 'COM_VIRTUEMART_STATUS') ?></th>
вставляем:
<th><?php echo JText::_ ('Tracking number') ?></th>
7) Ну вот и всё