Рекомендуемые сообщения

cinema4d    0

ПЛЗ я хочу вставить адрес клиента в order list

 

Делаю так

 

<td class="right"><?php echo $order['order_id']; ?></td>
              
              <td class="left"><?php echo $order['shipping_address_1'];  ?></td>
              
              <td class="left"><?php echo $order['customer']; ?></td>

 

В админ панели появляется Notice: Undefined index: shipping_address_1 in C:\xampp\htdocs\net\admin\view\template\sale\order_list.tpl on line 119

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
lakbor    49

Первым делом открывай

/admin/controller/sale/order.php

Там надо добавить пару строк:

if (strtotime($result['date_added']) > strtotime('-' . (int)$this->config->get('config_order_edit') . ' day')) {
	$action[] = array(
		'text' => $this->language->get('text_edit'),
	        'href' => $this->url->link('sale/order/update', 'token=' . $this->session->data['token'] . '&order_id=' . $result['order_id'] . $url, 'SSL')
		);
	}
// Вставляем эту строку:
	$my_order_info = $this->model_sale_order->getOrder($result['order_id']);
			
	$this->data['orders'][] = array(
		'order_id'      => $result['order_id'],
		'shipping_address' => $my_order_info['shipping_address_1'], // Добавляем этот параметр
		'customer'      => $result['customer'],
		'status'        => $result['status'],
		'total'         => $this->currency->format($result['total'], $result['currency_code'], $result['currency_value']),
		'date_added'    => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
		'date_modified' => date($this->language->get('date_format_short'), strtotime($result['date_modified'])),
		'selected'      => isset($this->request->post['selected']) && in_array($result['order_id'], $this->request->post['selected']),
		'action'        => $action
		);
	}

Далее лезем в шаблон:

/admin/view/template/sale/order_list.tpl

Там добавляем следующие строки:

<td class="right"><?php if ($sort == 'o.order_id') { ?>
       <a href="<?php echo $sort_order; ?>" class="<?php echo strtolower($order); ?>"><?php echo $column_order_id; ?></a>
     <?php } else { ?>
       <a href="<?php echo $sort_order; ?>"><?php echo $column_order_id; ?></a>
     <?php } ?></td>

<!--//////////////////// Вставляем эту строку (1-е вмешательство):-->				
<td class="left"><?php echo 'ADDRESS'; ?></td>
<!--////////////////////-->				

<td class="left"><?php if ($sort == 'customer') { ?>
    <a href="<?php echo $sort_customer; ?>" class="<?php echo strtolower($order); ?>"><?php echo $column_customer; ?></a>
  <?php } else { ?>
    <a href="<?php echo $sort_customer; ?>"><?php echo $column_customer; ?></a>
  <?php } ?></td>
<tr class="filter">
    <td></td>
    <td align="right"><input type="text" name="filter_order_id" value="<?php echo $filter_order_id; ?>" size="4" style="text-align: right;" /></td>

<!--//////////////////// Вставляем строку ниже (2-е вмешательство):-->              
    <td />
<!--////////////////////-->

    <td><input type="text" name="filter_customer" value="<?php echo $filter_customer; ?>" /></td>
<td class="right"><?php echo $order['order_id']; ?></td>

<!--//////////////////// Последняя строка, которую добавляем (3-е вмешательство):-->
   <td><?php echo $order['shipping_address']; ?></td>
<!--////////////////////-->

<td class="left"><?php echo $order['customer']; ?></td>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
cinema4d    0

ООО спасибо огромное приогромное реально, я понимаю что тут не уроки по пхп но если можно поясните плз я как раз сейчас учусь но вот это не понимаю ->

 

=> и значение этого

 

и поясните пожалуйста что помещенно в переменную $my_order_info.

 

а какая переменная отвечает за товар я таким же способом смогу ее вытащить??

 

Спасибо Вам еще раз!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
lakbor    49

незачто)

 

-> - это из области ООП, я понятия не имею как объяснить что она делает человеческим языком, но суть вот в чем: этой строкой мы создаем переменную $my_order_info, в которую помещается вся инфа о заказе. Т.е. ВООБЩЕ ВСЯ. а этой фигней ("->") мы вызываем нужную функцию (точнее указываем путь через класс).

 

=> - этим имени в списке присваивается значение. т.е. в обычном массиве значения идут подряд и обращаться к ним надо по индексам (my_array[0] например), а в именованном массиве обращение происходит по именам( my_named_array['first_index'] например).

 

соответственно, когда объявляем обычный массив достаточно просто перечислить значения, а интерпретатор автоматически присвоит их индексам от нуля и далее, а для именованного массива необходимо указывать названия (имена) индексов

 

simple_array[] = array ( abc, def, ghi, jkl);

named_array[] = array (

     'first_index'       => 'abc',

     'second_index' => 'def'

   );

 

как-то так...

 

а, вспомнил, эти массивы еще называют ассоциативными, а в PERL'e - Хэшами)

Изменено пользователем lakbor

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
cinema4d    0

этой строкой мы создаем переменную $my_order_info, в которую помещается вся инфа о заказе -- это не типо того же

$address = mysql_query ("SELECT email, order_id FROM order WHERE page='index'", $bd);
$myrow = mysql_fetch_array($address);

 

вся инфа о заказе. Т.е. ВООБЩЕ ВСЯ. -- тоесть и товар в корзине?

это в базе данных model_sale_order ??

 

а $this ??

 

сорри за тупость))

 

а можно это как то более длинно расписать но более понятно для чайника если не сложно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
lakbor    49

1) что запихивается в $my_order_info смотри в файле orders.php начиная примерно с 1540-й строки. там такая же переменная фигурирует как $order_info. Что в ней, соответственно, видно из того, что из нее извлекают ($order_info['то_что_извлекается'])

 

2) Да, то же самое (я не смотрел, что именно ты извлекаешь этим запросом, но СУТЬ такая же), ТОЛЬКО: твой прямой запрос к БД нарушает:

          а) принципы ООП,

          б) безопасность,

          в) тебе придется (ввиду нарушения пункта "а" еще писать код для подключения к БД с вводом логина и пароля (именно поэтому нарушается пункт "б")

 

3) вся инфа ОБ УЖЕ СДЕЛАННОМ заказе. соответственно никакой корзины нет и быть не может, товар из корзины перекочевал в статус товара в заказе.

 

4) в какой таблице базы - не знаю, поищи сам...

 

5) $this - ООПшная отсылка к методу, доступному в данном скрипте

          т.е. $this->model_sale_order->getOrder($result['order_id']) вызывает функцию getOrder(),

          $this->data['orders'][] = array( создает массив $orders, который будет доступен из скрипта (шаблона)

 

     http://php.net/manual/en/language.oop5.basic.php

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
cinema4d    0

Спасибо буду пробовать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
deim    241

Вы бы лакбору хоть один плюсик поставили, если вам помогли его советы ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
cinema4d    0

Вы бы лакбору хоть один плюсик поставили, если вам помогли его советы ;)

ДА конечно замылило мозг извините не увидел!)) просто рванул выводить коменты и товар таким же способом но чую опять долго по ночам сидеть придется)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
cinema4d    0

Вот по анологии разве не получится?

 

если в $my_order_info залетает все о заказе то поидее вот так 'comment_array'=>$my_order_info['comment'],

и $comment_array потом выводим в ордер лист?? тупня я да)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
cinema4d    0

Ой  вчера и правда видно уже кипел, комменты вывел все норм их просто е было))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
cinema4d    0

Ой  вчера и правда видно уже кипел, комменты вывел все норм их просто е было))))

ааха то подскажет какая переменная товар ордера??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
cinema4d    0

подскажите как проще отследить переменную и в каком скрипте ведь браузер пхп не отображает??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
lakbor    49

Вы бы лакбору хоть один плюсик поставили, если вам помогли его советы ;)

спасибо=)

 

 

Вот по анологии разве не получится?

 

если в $my_order_info залетает все о заказе то поидее вот так 'comment_array'=>$my_order_info['comment'],

и $comment_array потом выводим в ордер лист?? тупня я да)))

да, по идее верно

 

 

Ой  вчера и правда видно уже кипел, комменты вывел все норм их просто е было))))

ааха то подскажет какая переменная товар ордера??

 

подскажите как проще отследить переменную и в каком скрипте ведь браузер пхп не отображает??

 о какой именно переменной идет речь? поточнее опиши пожалуйста)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
lakbor    49

Вот по анологии разве не получится?

 

если в $my_order_info залетает все о заказе то поидее вот так 'comment_array'=>$my_order_info['comment'],

и $comment_array потом выводим в ордер лист?? тупня я да)))

 

только не

$comment_array

 

, а

$order['comment_array']

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
cinema4d    0

Вот по анологии разве не получится?

 

если в $my_order_info залетает все о заказе то поидее вот так 'comment_array'=>$my_order_info['comment'],

и $comment_array потом выводим в ордер лист?? тупня я да)))

 

только не

$comment_array

 

, а

$order['comment_array']

 

Вы бы лакбору хоть один плюсик поставили, если вам помогли его советы ;)

спасибо=)

 

 

>Вот по анологии разве не получится?

 

если в $my_order_info залетает все о заказе то поидее вот так 'comment_array'=>$my_order_info['comment'],

и $comment_array потом выводим в ордер лист?? тупня я да)))

да, по идее верно

 

 

Ой  вчера и правда видно уже кипел, комменты вывел все норм их просто е было))))

ааха то подскажет какая переменная товар ордера??

 

подскажите как проще отследить переменную и в каком скрипте ведь браузер пхп не отображает??

 о какой именно переменной идет речь? поточнее опиши пожалуйста)

 

вот в БД есть таблица order_product в ней поле name, хочу в order_list еще сразу вывести что оформил покупатель но тут для меня еще сложнее таблица другая не includ же не чего нет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
lakbor    49

Итак, приступим!

 

Перед той строкой, которую недавно впаивали (в order.php)

$my_order_info = $this->model_sale_order->getOrder($result['order_id']);

Вставляй вот ЭТО:

////////////////////////////////////////////////////////////

$my_product = array();
$my_products = $this->model_sale_order->getOrderProducts($result['order_id']);

     foreach ($my_products as $product) {
     $my_product[] = array(
	'order_product_id' => $product['order_product_id'],
	'product_id'       => $product['product_id'],
	'name'     	   => $product['name'],
	'model'   	   => $product['model'],
	'quantity'	   => $product['quantity'],
	);
     }
	
////////////////////////////////////////////////////////////

Далее, переделай массив, который редактировали недавно (чуть ниже):

 

$this->data['orders'][] = array(
   'order_id'      => $result['order_id'],
   'shipping_address' => $my_order_info['shipping_address_1'],
   'products_ordered' => $my_product, // На этот раз добавляем вот этот параметр
   'customer'      => $result['customer'],
   'status'        => $result['status'],
   'total'         => $this->currency->format($result['total'], $result['currency_code'], $result['currency_value']),
   'date_added'    => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
   'date_modified' => date($this->language->get('date_format_short'), strtotime($result['date_modified'])),
   'selected'      => isset($this->request->post['selected']) && in_array($result['order_id'], $this->request->post['selected']),
   'action'        => $action
);

 

Теперь переходим к order_list.tpl:

 

там дописывай старые вмешательства наши, чтоб было как тут:

<!--////////////////////-->				
     <td class="left"><?php echo 'ADDRESS'; ?></td>
     <td class="left"><?php echo 'PRODUCTS'; ?></td>
<!--////////////////////-->	
<!--////////////////////-->              
     <td />
     <td />
<!--////////////////////-->
<!--////////////////////-->
     <td><?php echo $order['shipping_address']; ?></td>
     <td>
          <?php $i=0;
	        $my_prods = $order['products_ordered'];
		while ($i < sizeof($my_prods)) { 
		     echo '>> '. $my_prods[$i]['quantity'] . ' x ' . $my_prods[$i]['name'] . '<br>';
		     $i++;
		}?>
     </td>
<!--////////////////////-->

Соответственно отображение можешь менять по своему желанию, я поставил так ( ">> кол-во_товара х наименование_товара"):

>> 1 х Товар_1

>> 5 x Товар_2

 

Да, и массивчик с запасом, можно посмотреть модель товара, например.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
cinema4d    0

Вы монстр спасибо приогромное плюс прислал уже!! ща попробую)))

 

Если можно опять поясните не хочу тупо копировать есть желание хоть чего то выучить основы учил на C# думал что пхп будет попроще
$my_product = array(); это создаем массив да? но скобки пустые

$my_products = $this->model_sale_order->getOrderProducts($result['order_id']); в $my_products -> вызывает функцию model_sale_order от туда getOrderProducts ?? ($result['order_id']);

 

foreach ($my_products as $product) ищим $my_products в $product и если находим то выполняем условие да?

 

{
$my_product[] = array(
    'order_product_id' => $product['order_product_id'],
    'product_id' => $product['product_id'],
    'name'      => $product['name'],
    'model'      => $product['model'],
    'quantity'     => $product['quantity'],
    );
}

 

 

в 'products_ordered' => заносим массив $my_product,

 

<?php $i=0;
     $my_prods = $order['products_ordered'];
        while ($i < sizeof($my_prods))  цикл если i < ??

{
         echo '>> '. $my_prods[$i]['quantity'] . ' x ' . $my_prods[$i]['name'] . '<br>'; ????
         $i++; инкримент вроде +1
        }?>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
lakbor    49

пока попробуй как работает, а объясню когда копирование категорий доделаю))

 

да, и не забывай делать бэкапы ВСЕГО, что меняешь))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
cinema4d    0

Итак, приступим!

 

Перед той строкой, которую недавно впаивали (в order.php)

$my_order_info = $this->model_sale_order->getOrder($result['order_id']);

Вставляй вот ЭТО:

////////////////////////////////////////////////////////////

$my_product = array();
$my_products = $this->model_sale_order->getOrderProducts($result['order_id']);

     foreach ($my_products as $product) {
     $my_product[] = array(
	'order_product_id' => $product['order_product_id'],
	'product_id'       => $product['product_id'],
	'name'     	   => $product['name'],
	'model'   	   => $product['model'],
	'quantity'	   => $product['quantity'],
	);
     }
	
////////////////////////////////////////////////////////////

Далее, переделай массив, который редактировали недавно (чуть ниже):

 

$this->data['orders'][] = array(
   'order_id'      => $result['order_id'],
   'shipping_address' => $my_order_info['shipping_address_1'],
   'products_ordered' => $my_product, // На этот раз добавляем вот этот параметр
   'customer'      => $result['customer'],
   'status'        => $result['status'],
   'total'         => $this->currency->format($result['total'], $result['currency_code'], $result['currency_value']),
   'date_added'    => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
   'date_modified' => date($this->language->get('date_format_short'), strtotime($result['date_modified'])),
   'selected'      => isset($this->request->post['selected']) && in_array($result['order_id'], $this->request->post['selected']),
   'action'        => $action
);

 

Теперь переходим к order_list.tpl:

 

там дописывай старые вмешательства наши, чтоб было как тут:

<!--////////////////////-->				
     <td class="left"><?php echo 'ADDRESS'; ?></td>
     <td class="left"><?php echo 'PRODUCTS'; ?></td>
<!--////////////////////-->	
<!--////////////////////-->              
     <td />
     <td />
<!--////////////////////-->
<!--////////////////////-->
     <td><?php echo $order['shipping_address']; ?></td>
     <td>
          <?php $i=0;
	        $my_prods = $order['products_ordered'];
		while ($i < sizeof($my_prods)) { 
		     echo '>> '. $my_prods[$i]['quantity'] . ' x ' . $my_prods[$i]['name'] . '<br>';
		     $i++;
		}?>
     </td>
<!--////////////////////-->

Соответственно отображение можешь менять по своему желанию, я поставил так ( ">> кол-во_товара х наименование_товара"):

>> 1 х Товар_1

>> 5 x Товар_2

 

Да, и массивчик с запасом, можно посмотреть модель товара, например.

 

 

пока попробуй как работает, а объясню когда копирование категорий доделаю))

 

да, и не забывай делать бэкапы ВСЕГО, что меняешь))

Да я вставил работает отлично, я все отрабатываю на локалке ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
lakbor    49

Если можно опять поясните не хочу тупо копировать есть желание хоть чего то выучить основы учил на C# думал что пхп будет попроще
$my_product = array(); это создаем массив да? но скобки пустые

//ОБЪЯВЛЯЕМ массив

 

 

$my_products = $this->model_sale_order->getOrderProducts($result['order_id']);
в $my_products -> вызывает функцию model_sale_order от туда getOrderProducts ?? ($result['order_id']);
//Вызываем функцию getOrderProducts() класса model_sale_order и пишем результат ее работы в $my_products


foreach ($my_products as $product) ищим $my_products в $product и если находим то выполняем условие да?

//Не, этим циклом ПЕРЕБИРАЕМ все элементы массива $my_products и на каждой итерации цикла работаем с каждым элементом в отдельности через переменную $product



{
$my_product[] = array(
'order_product_id' => $product['order_product_id'],
'product_id' => $product['product_id'],
'name' => $product['name'],
'model' => $product['model'],
'quantity' => $product['quantity'],
);
}





в 'products_ordered' => заносим массив $my_product,

//Это к какой части кода вопрос?



<?php $i=0;
$my_prods = $order['products_ordered'];
while ($i < sizeof($my_prods)) цикл если i < ??

//Пока $i меньше размера массива $my_prods, sizeof() или, что то же самое, count(),  возвращает кол-во элементов в массиве

{
echo '>> '. $my_prods[$i]['quantity'] . ' x ' . $my_prods[$i]['name'] . '<br>'; ????
$i++; инкримент вроде +1
}?>

 

//расписываю цикл полностью:

$i обнуляем

создаем массив $my_prods и засовываем в него массив проданных товаров, вытянутый из общего массива $order

пока ($i меньше количества элементов в массиве $my_prods) {

    выводим текст ">>" точкой присоединяем к нему значение $my_prods[$i счетчик товарных позиций][количество товара данной позиции] присоединяем к выводимой строке крестик, присоединяем тем же способом название товара из заказа, соответствующее товарной позиции $i, переходим на новую строку

 

Увеличить значение переменной на 1 можно:

а) $i = $i + 1;   // Тут все понятно, я думаю

б) $i++;            //ПОСТинкремент

в) ++$i;            //ПРЕинкремент

г) $i += 1;        // То же самое, что и под буквой А, только в укороченной форме

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
cinema4d    0

я как только увидел пояснение кода сразу говорю Вам огромное спасибо что возитесь со мной))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
igarik    0

Доброго времени, а как сделать так, чтобы в письме выводились контактные данные о покупателе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
deim    241

Доброго времени, а как сделать так, чтобы в письме выводились контактные данные о покупателе?

Побродить по форуму и воспользоваться формой поиска.

Про генерацию письма я совсем недавно отвечал

 

upd: для ленивых https://opencartforum.com/topic/23298-rezhaktirovanie-shablona-pisma-administratoru/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
kopfsturm    0

Займемся некропостингом!)

Большое спасибо lakbor за реализацию идеи, очень пригодилось!

Возник вопрос - как можно реализовать рабочее поле ввода для фильтрации? (Типа как у "Заказ", "Покупатель" и т.п.).

Пока что приходится пользоваться ctrl+f...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу