Перейти к содержимому


Фото
- - - - -

Вывести название группы покупателя на странице "Заказы"

вывод названия группы Покупатели группы покупателя покупатель группы

Best Answer Noxter , 04.12.2018 - 12:10

Спасибо за ответ. Но мне надо что бы выводилось в (orders.tpl). Что надо в общем. Что бы в списке заказов, ну допустим ( Заказ №11111, было рядом где то, ну допустим под номером заказа, было написано : "Частый покупатель"), где "частый покупатель" - это одна из групп пользователя.

Файл simpla/OrdersAdmin.php найти:

// Отображение
$orders = array();
foreach($this->orders->get_orders($filter) as $o)
	$orders[$o->id] = $o;

И заменить на:

// Отображение
$orders = array();
foreach($this->orders->get_orders($filter) as $o)
{
	if(!empty($o->user_id))
	{
		$o->user = $this->users->get_user(intval($o->user_id));
	}
	$orders[$o->id] = $o;
}

В шаблоне вам теперь будет доступен объект {$order->user->group_name}.
Конечно решение не лучшее т.к. делает лишние запросы в БД в каждой интерации цикла.
Правильнее будет расширить функцию get_users добавив фильтрацию по ID пользователей передавая массив айдишек, но у меня не так уж много времени чтобы расписывать кучу мануала, так что кому не нравиться молча проходим мимо не воняя (особенно касается Корса).

Перейти к посту


  • Чтобы отвечать, сперва войдите на форум
13 ответов в теме

#1 snappk

snappk
  • Пользователь
  • 37 сообщений

Опубликовано 03.12.2018 - 17:58

Доброго Всем времени суток.

Не как не могу сделать вывод названия группы покупателя на странице Заказы, именно в какой группе он(покупатель) находится на страницы заказов.

Сделал вывод названия группы на странице "Покупатели", через {$user->group_id->name|escape} - получилось.

А вот на странице заказов не как не получается, Помогите люди добрые! 



#2 yr4ik

yr4ik
  • Фрилансер
  • 896 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:Украина Чернигов

Опубликовано 03.12.2018 - 21:49

Сделал вывод названия группы на странице "Покупатели", через {$user->group_id->name|escape} - получилось.

 

Это абсурд! Максимум что вы такой переменной выведите - это текст ошибки.

Если же кто то вам туда не всунул объект вместо инта. Тогда руки бы таким мастерам поровнять... 

 

{if $group}
{$group->name} 
{/if}

Изменено: yr4ik, 03.12.2018 - 21:53


#3 phukortsin

phukortsin
  • Пользователь
  • 586 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 04.12.2018 - 09:54

{if $group}
{$group->name} 
{/if}

 

Этим кодом предлагается способ решения вопроса? У меня такой не работает в админке на странице отдельного заказа (order.tpl). Работает так:

{$user->group_name} 

Если же вопрос ТС относится к странице СПИСКА заказов в админке (orders.tpl), то для вывода там надо и PHP код менять...



#4 snappk

snappk
  • Пользователь
  • 37 сообщений

Опубликовано 04.12.2018 - 11:27

Этим кодом предлагается способ решения вопроса? У меня такой не работает в админке на странице отдельного заказа (order.tpl). Работает так:

{$user->group_name} 

Если же вопрос ТС относится к странице СПИСКА заказов в админке (orders.tpl), то для вывода там надо и PHP код менять...

Спасибо за ответ. Но мне надо что бы выводилось в (orders.tpl). Что надо в общем. Что бы в списке заказов, ну допустим ( Заказ №11111, было рядом где то, ну допустим под номером заказа, было написано : "Частый покупатель"), где "частый покупатель" - это одна из групп пользователя.


Изменено: snappk, 04.12.2018 - 11:28


#5 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 6 824 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 04.12.2018 - 12:10   Best Answer

Спасибо за ответ. Но мне надо что бы выводилось в (orders.tpl). Что надо в общем. Что бы в списке заказов, ну допустим ( Заказ №11111, было рядом где то, ну допустим под номером заказа, было написано : "Частый покупатель"), где "частый покупатель" - это одна из групп пользователя.

Файл simpla/OrdersAdmin.php найти:

// Отображение
$orders = array();
foreach($this->orders->get_orders($filter) as $o)
	$orders[$o->id] = $o;

И заменить на:

// Отображение
$orders = array();
foreach($this->orders->get_orders($filter) as $o)
{
	if(!empty($o->user_id))
	{
		$o->user = $this->users->get_user(intval($o->user_id));
	}
	$orders[$o->id] = $o;
}

В шаблоне вам теперь будет доступен объект {$order->user->group_name}.
Конечно решение не лучшее т.к. делает лишние запросы в БД в каждой интерации цикла.
Правильнее будет расширить функцию get_users добавив фильтрацию по ID пользователей передавая массив айдишек, но у меня не так уж много времени чтобы расписывать кучу мануала, так что кому не нравиться молча проходим мимо не воняя (особенно касается Корса).


Изменено: Noxter, 04.12.2018 - 12:14


#6 snappk

snappk
  • Пользователь
  • 37 сообщений

Опубликовано 04.12.2018 - 12:34

Файл simpla/OrdersAdmin.php найти:

// Отображение
$orders = array();
foreach($this->orders->get_orders($filter) as $o)
	$orders[$o->id] = $o;

И заменить на:

// Отображение
$orders = array();
foreach($this->orders->get_orders($filter) as $o)
{
	if(!empty($o->user_id))
	{
		$o->user = $this->users->get_user(intval($o->user_id));
	}
	$orders[$o->id] = $o;
}

В шаблоне вам теперь будет доступен объект {$order->user->group_name}.
Конечно решение не лучшее т.к. делает лишние запросы в БД в каждой интерации цикла.
Правильнее будет расширить функцию get_users добавив фильтрацию по ID пользователей передавая массив айдишек, но у меня не так уж много времени чтобы расписывать кучу мануала, так что кому не нравиться молча проходим мимо не воняя (особенно касается Корса).

Noxter - спасибо большое Вам! Всё работает. Задача решена! 



#7 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 6 824 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 04.12.2018 - 14:43

Noxter - спасибо большое Вам! Всё работает. Задача решена! 

Всегда пожалуйста!

#8 yr4ik

yr4ik
  • Фрилансер
  • 896 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:Украина Чернигов

Опубликовано 04.12.2018 - 22:53

Файл simpla/OrdersAdmin.php найти:

// Отображение
$orders = array();
foreach($this->orders->get_orders($filter) as $o)
	$orders[$o->id] = $o;

И заменить на:

// Отображение
$orders = array();
foreach($this->orders->get_orders($filter) as $o)
{
	if(!empty($o->user_id))
	{
		$o->user = $this->users->get_user(intval($o->user_id));
	}
	$orders[$o->id] = $o;
}

В шаблоне вам теперь будет доступен объект {$order->user->group_name}.
Конечно решение не лучшее т.к. делает лишние запросы в БД в каждой интерации цикла.
Правильнее будет расширить функцию get_users добавив фильтрацию по ID пользователей передавая массив айдишек, но у меня не так уж много времени чтобы расписывать кучу мануала, так что кому не нравиться молча проходим мимо не воняя (особенно касается Корса).

 

Я бы немного переделал. Сделал бы какой то локальный массив для пользователей. То не комильфо будет если заказов много. Получение одного и тоже пользователя будет происходить столько же сколько и заказов (вместо одного) 



#9 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 6 824 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 05.12.2018 - 01:50

Я бы немного переделал. Сделал бы какой то локальный массив для пользователей. То не комильфо будет если заказов много. Получение одного и тоже пользователя будет происходить столько же сколько и заказов (вместо одного)

Всё верно, нужно расширять стоковое API симплы, без этого только "костыли".

#10 phukortsin

phukortsin
  • Пользователь
  • 586 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 05.12.2018 - 16:52

В аналогичных случаях, когда другие предлагают нерациональное решение, укажаемый Noxter на них набрасывается как коршун, например, в теме

http://forum.simplac...аров-в-корзине/

прямо-таки заклевал

Странно то, что ты берешь заказы по программированию, а такую мелочь как решить вопрос ТС не осилил.
Полагаю что ты как был дуб дубом в программировании так и остался, и за тебя делает всё Davinci, не плохо спелись.

 

А теперь сам предлагает решения "дуб дубом"...

 

ИМХО, такие решения можно ожидать от новичков, а мастеру с "большими скилами" за такое стыдно должно быть...

 

В то время как рациональное решение написать не так уж и сложно.

		// Отображение
		$orders = array();
		$uids = array();
		foreach($this->orders->get_orders($filter) as $o){
			$orders[$o->id] = $o;
			$uids[$o->user_id]=$o->user_id;
		}
		if($uids){
			$query = $this->db->placehold("SELECT u.*, g.discount, g.name as group_name FROM __users u
		                                LEFT JOIN __groups g ON u.group_id=g.id 
										WHERE u.id IN (?@)", $uids);
			$this->db->query($query);
			$users = array();
			foreach($this->db->results() as $user)
				$users[$user->id] = $user;
			foreach($orders as &$order)
				$order->user=$users[$order->user_id];
		}

А есть способ, на мой взгляд, и еще лучше: в таблицу заказов сразу при формировании  заказа записывать новое поле названия группы - как это делается стандартно для данных покупателя. Сделать совсем несложно, зато потом вообще никаких особых запросов не потребовалось бы...



#11 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 6 824 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 05.12.2018 - 17:02

Так и знал напиши сразу говно начнёт вонять на весь форум...
Тьфу на тебя Корс ты вонючее

#12 pudohom

pudohom
  • Пользователь
  • 71 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Пермь

Опубликовано 06.12.2018 - 18:18

Так и знал напиши сразу говно начнёт вонять на весь форум...
Тьфу на тебя Корс ты вонючее

А по факту крыть чем-то можешь?



#13 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 6 824 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 06.12.2018 - 19:25

А по факту крыть чем-то можешь?

Тем что ничего кроме говнокода ты не смог придумать, вместо того чтобы в выборке пользователей добавить ещё один фильтр по ID пользователей (я выше даже подсказку дал) ты тупо хяуришь SQL запрос в контроллере что по концепции MVC считается плохим тоном.
Ну да откуда ты мог знать об этом если ты олдскульный говнокодер-псевдо-программист?
Как тебе такой факт - ты былокодер?

#14 phukortsin

phukortsin
  • Пользователь
  • 586 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 08.12.2018 - 08:39

А по факту крыть чем-то можешь?

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

1. Основная претензия к Noxter-у была в том, что он выложил решение, подобное тому, которое сам оценил в указанной теме еще в 2016 году "дуб дубом".
И этот момент он крыть даже не пытается - должно быть,  нечем.
 
2. А поскольку, вероятно, религия не позволяет Noxter-у просто признать свой ляп, он переводит стрелки на другое. Прием знакомый. Нашел мелкий недостаток в предложенном решении

 

...SQL запрос в контроллере что по концепции MVC считается плохим тоном.

 

и бьет теперь на него. А недостаток чисто формальный, крайне спорный и особо недостатком-то не является.
 
3. А недостаток в решении Noxter-а куда хуже и и идейно ведет в тупик. В текущем решении прибавляет на странице 20-50 запросов БД вместо одного. Вроде и не страшно, если страница в админке. А мне как-то раз приходилось исправлять сайт после одного мастера, который такой прием применил дважды циклом в цикле. Так там реально приходилось ждать загрузки некоторых страниц по 20-30 сек. Причина была в том, что в итоге запросов создавалось по 2-3  тысячи на страницу...


Изменено: phukortsin, 08.12.2018 - 08:53






Также с меткой «вывод названия группы, Покупатели, группы покупателя, покупатель, группы»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых