Синтаксис HTML вывод ЦИКЛа В ЦИКЛЕ

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
kupidon
phpBB 1.4.4
Сообщения: 120
Стаж: 14 лет 5 месяцев
Благодарил (а): 62 раза

Синтаксис HTML вывод ЦИКЛа В ЦИКЛЕ

Сообщение kupidon »

Приветствую ув. форумчан. Помогите пожалуйста оформить HTML цикл в цикле.

необходим похожий результат:

г. Красноярск
ФИО:
иванов
макаров
татаров
г. Новосибирск
ФИО:
иванов
медведев
путин

вот мой код :

Код: Выделить всё

<!-- BEGIN test1 -->
        <p>{test1.GOROD}
           <table >
<tr ><td>ФИО:</td></tr>
<!-- BEGIN test2 -->
<tr ><td>{test2.FIO}</td></tr>
<!-- END test2 --> 
</table>
        </p>
       <!-- END test1--> 
Правильно? Будет так работать? Или искать ошибку в php? потому что сейчас пишутся только города, а фимилии вообще не пишутся, внутренний цикл не работает.
Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1097
Стаж: 17 лет 8 месяцев
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 206 раз

Re: Синтаксис HTML вывод ЦИКЛа В ЦИКЛЕ

Сообщение Garret_Dark »

kupidon, может проще ограничится одним циклом и записывать все результаты второго цикла в одну переменную первого (массив, который в конце имплодить с разделением BR)? А лучше сделать два запроса к данным разделив полученные данные по условию (город).

Насчет вложенных циклов, насколько я помню, придется поиграть добавлять имя цикла родителя.
Что то вроде этого <!-- BEGIN test1.test2 --> либо только в PHP файле, либо и там и там... увы на вскидку не вспомню, т.к. отказался от данного метода - он вызывал большое кол-во SQL запросов.
Аватара пользователя
kupidon
phpBB 1.4.4
Сообщения: 120
Стаж: 14 лет 5 месяцев
Благодарил (а): 62 раза

Re: Синтаксис HTML вывод ЦИКЛа В ЦИКЛЕ

Сообщение kupidon »

Garret_Dark писал(а):А лучше сделать два запроса к данным разделив полученные данные по условию (город).
Не понял как это?

допустим у меня есть две таблицы в БД:
первая с городами:
1 Красноярск
2 Иваново
3 Новосиб

вторая с фио, которые посещали эти города:
2 Петров
2 Иванов
3 сидоров
1 иванов
3 мамаев

грубо говоря вот моя схема:

SQL запрос к первой таблице {
формирую массив названий городов;
определяю кол-во строк массива;
}
цикл ( от 1 до количества строк первого массива)
{
SQL запрос ко второй таблице {
формирую массив фамилий по ид города;
передача в шаблон ФИО;
}
передача в шаблон ГОРОД;
}

Как сделать вывод именно табличный: например идет название города, под ним табличка с фамилиями и др данными..потом снова город и ниже новая таблица??
Аватара пользователя
Pazh
Former team member
Сообщения: 2317
Стаж: 16 лет 10 месяцев
Благодарил (а): 42 раза
Поблагодарили: 506 раз

Re: Синтаксис HTML вывод ЦИКЛа В ЦИКЛЕ

Сообщение Pazh »

вот посчитай сколько запросов у тебя будет в этом варианте? 1 запрос "верхнего уровня" + n запросов вложенных, каждый из которых выдает только одну строку (где n - кол-во строк, которое вернул верхний запрос)
а теперь модифицируем схему например так:

Код: Выделить всё

$sql = 'select id, name from phpbb_city';
$result=$db->sql_query($sql);
$cities = $fio = array();
while($row = $db->sql_fetchrow($result))
{
  $cities[$row['id']] = $row['name'];
}
$db->sql_freeresult($result);
if(sizeof($cities))
{
$sql = 'select city_id,fio_id, surname from phpbb_fio where ' . $db->sql_in_set('city_id',array_keys($cities));
$result=$db->sql_query($sql);
while($row = $db->sql_fetchrow($result))
{
if(!isset($fio[$row['city_id']])) {$fio[$row['city_id']] = array();}
$fio[$row['city_id']][$row['fio_id']] = $row['surname'];
}
$db->sql_freeresult($result);
foreach($cities as $id=>$name)
{
    $template->assign_block_vars('city', array('city_id' 		=> $id,'name' 		=> $name,);
foreach($fio[$id] as $fio_id=>$surname)
{
    $template->assign_block_vars('city.fio', array('fio_id' 		=> $fio_id,'surname' 		=> $surname,);
}
}
}
unset($fio,$city);
имеем всего 2 запроса в БД. Код не проверялся на работоспособность!!!
Помощь в ЛС/email только за WM или ЮMoney
Аватара пользователя
kupidon
phpBB 1.4.4
Сообщения: 120
Стаж: 14 лет 5 месяцев
Благодарил (а): 62 раза

Re: Синтаксис HTML вывод ЦИКЛа В ЦИКЛЕ

Сообщение kupidon »

Поправьте пожалуйста , что то пропустили :$fio[$row['city_id']][$row['fio_id']] = $row['surname'];

сижу разбираюсь пока
Аватара пользователя
Pazh
Former team member
Сообщения: 2317
Стаж: 16 лет 10 месяцев
Благодарил (а): 42 раза
Поблагодарили: 506 раз

Re: Синтаксис HTML вывод ЦИКЛа В ЦИКЛЕ

Сообщение Pazh »

kupidon писал(а):Поправьте пожалуйста , что то пропустили
Не понял что поправить и что пропустил? Указанная строка есть в тексте
Помощь в ЛС/email только за WM или ЮMoney
Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1097
Стаж: 17 лет 8 месяцев
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 206 раз

Re: Синтаксис HTML вывод ЦИКЛа В ЦИКЛЕ

Сообщение Garret_Dark »

kupidon, приведите код который используете, так будет проще
Аватара пользователя
kupidon
phpBB 1.4.4
Сообщения: 120
Стаж: 14 лет 5 месяцев
Благодарил (а): 62 раза

Re: Синтаксис HTML вывод ЦИКЛа В ЦИКЛЕ

Сообщение kupidon »

Pazh писал(а):Не понял что поправить и что пропустил? Указанная строка есть в тексте
прошу прощения, с этой строкой разобрался. Просто не думал что можно к массиву добавить вложенный массив)
Garret_Dark писал(а):kupidon, приведите код который используете, так будет проще
не думаю, что вам будет проще...потому что я часто программирую в ексель, начинал с бэйсика, паскаля, теперь php одолеть не могу...и всегда пользуюсь циклами. :) Поэтому: как не использовать циклы, при sql, пока в голове не укладывается.

Код: Выделить всё

 // Из таблицы всех закупок выбираем номера закупок пользователя 296, которые не в архиве
  $query = 'SELECT id_purchases,name
		FROM sp_purchases
		WHERE id_username = 296 and archivepur <1';
	 $rrs = $db->sql_query($query);
  while( $row = $db->sql_fetchrow($rrs) ) 
  {
  $purchases[] = $row["id_purchases"]; 
  $purchasestxt[] = $row["name"];
  }
   $kol=(count($purchases)) ;

  // Из таблицы заказанных товаров выбираем всех пользователей которые участвуют в выбранных ранее закупках и имееют статус заказа =2
for($y = 0; $y < $kol; $y++)  
{
$query = 'SELECT distinct user_order
  FROM sp_orders_items WHERE purchase_order=  ' .$purchases[$y]. ' and state_order =2';
  $rrq = $db->sql_query($query);
  while( $row = $db->sql_fetchrow($rrq) ) 
  {
  $nam[] = $row['user_order'];
  }
   $koluser=(count($nam)) ;
  echo "Закупка ".$purchasestxt[$y]	.'</br>';
  echo "Количество пользователей в закупке: ".$koluser	.'</br>';
  for($z = 0; $z < $koluser; $z++)  
  { echo "Пользователь: ".$nam[$z]	.'</br>';}
unset($nam);}
сильно не ругайтесь, но этот код выводится в php, и я бы его доделал, но надо вывод в шаблон сделать..
посмотреть результат можно: http://19sp.ru/forum/gdezakupka.php
Если вы поможете мне добить этот код- буду благодарен. Если нет- то буду продолжать изучать ваш.
Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1097
Стаж: 17 лет 8 месяцев
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 206 раз

Re: Синтаксис HTML вывод ЦИКЛа В ЦИКЛЕ

Сообщение Garret_Dark »

kupidon, попробуйте так (Структуру БД не знаю, потому навскидку)
По крайней мере таким образом ограничиваемся 2 запросами к БД и далее в цикле перебираем полученные данные:

Код: Выделить всё

// Из таблицы всех закупок выбираем номера закупок пользователя 296, которые не в архиве
$need_user = 296; // ID юзера
$kol = 0; // Указываем значение счетчика 0
$query = 'SELECT id_purchases,name
		FROM sp_purchases
		WHERE id_username = '.(int) $need_user.' 
		AND archivepur < 1';
$rrs = $db->sql_query($query);
while($row = $db->sql_fetchrow($rrs)) 
{
	$purchases[] = $row["id_purchases"]; 
	$purchasestxt[] = $row["name"];
	$kol++;
}

// Из таблицы заказанных товаров выбираем всех пользователей которые участвуют в выбранных ранее закупках и имееют статус заказа =2
$sql = 'SELECT purchase_order, user_order
		FROM sp_orders_items
		WHERE '.$db->sql_in_set('purchase_order', $purchases).'
		AND and state_order = 2';
$result = $db->sql_query($sql);
while($row = $db->sql_fetchrow($result))
{
	$nam[$row['purchase_order']][] = $row['user_order'];
}

foreach($purchases as $i => $id)
{
	$count = count($nam[$id]);
	if(!$count){ continue; } // Если заказов такой закупки нет пропускаем ее
	echo "Закупка ".$purchasestxt[$i]	.'</br>';
	echo "Количество пользователей в закупке: ".$count.'</br>';
	echo "Пользователи: ".implode(', ', $nam[$id]).'</br>';
	//Либо так:
	//echo "Пользователь: ".implode('</br>Пользователь: ', $nam[$id]).'</br>';
}
Также необходимо расставить IF'ы на случай если данных по некоторым закупкам не будет.
Аватара пользователя
kupidon
phpBB 1.4.4
Сообщения: 120
Стаж: 14 лет 5 месяцев
Благодарил (а): 62 раза

Re: Синтаксис HTML вывод ЦИКЛа В ЦИКЛЕ

Сообщение kupidon »

Garret_Dark писал(а):kupidon, попробуйте так (Структуру БД не знаю, потому навскидку)
По крайней мере таким образом ограничиваемся 2 запросами к БД и далее в цикле перебираем полученные данные:
так оно все правильно..еще distinct добавил..посмотреть ваш результат можно тут

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

теперь уже так: как ваш код вывести в шаблон?
название закупки, (ниже таблица с участниками), потом след название-и снова таблица....
Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1097
Стаж: 17 лет 8 месяцев
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 206 раз

Re: Синтаксис HTML вывод ЦИКЛа В ЦИКЛЕ

Сообщение Garret_Dark »

kupidon писал(а):перевод этих двух массивов в шаблон
Заменить цикл на

Код: Выделить всё

foreach($purchases as $i => $id)
{
	$count = count($nam[$id]);
	if(!$count){ continue; } // Если заказов такой закупки нет пропускаем ее
	$template->assign_block_vars('users_orders',array(
		'PURCHASE'		=> $purchasestxt[$i],
		'COUNT'			=> $count,
		'USERS'			=> implode(', ', $nam[$id]),
	)
	);
}
Как оформить таблицой: используйте синтаксис шаблонов http://www.phpbbguru.net/kb/styling/tem ... -tutorial/
Чтобы разделить юзеров не запятой, а строчками, ипользуйте в функции IMPLODE другой разделитель.
Аватара пользователя
kupidon
phpBB 1.4.4
Сообщения: 120
Стаж: 14 лет 5 месяцев
Благодарил (а): 62 раза

Re: Синтаксис HTML вывод ЦИКЛа В ЦИКЛЕ

Сообщение kupidon »

Garret_Dark писал(а):Как оформить таблицой: используйте синтаксис шаблонов http://www.phpbbguru.net/kb/styling/tem ... -tutorial/
Чтобы разделить юзеров не запятой, а строчками, ипользуйте в функции IMPLODE другой разделитель.
Мне кажется что функция имплод тут бессильна...она не создаст табличную строку...а простой перенос данных -это не то что надо.
27d2ce8b07db.jpg
:(
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1097
Стаж: 17 лет 8 месяцев
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 206 раз

Re: Синтаксис HTML вывод ЦИКЛа В ЦИКЛЕ

Сообщение Garret_Dark »

kupidon, ну е мое... думайте, думайте, все просто на самом деле.
А телепатически я представить не могу что вы хотите получить, т.к. на скрине у вас появились еще какие то данные...
HTML разметку одной таблицы дайте
Аватара пользователя
kupidon
phpBB 1.4.4
Сообщения: 120
Стаж: 14 лет 5 месяцев
Благодарил (а): 62 раза

Re: Синтаксис HTML вывод ЦИКЛа В ЦИКЛЕ

Сообщение kupidon »

спасибо за терпение.
Вот которая на фото ( убрал лишние поля,чтобы на них не отвлекаться):

Код: Выделить всё

 <!-- BEGIN users_orders-->
        <p>{users_orders.PURCHASE}
           <table border="1" width="100%" >
<tr > <td>Ник Уза</td></tr>
<tr> <td>{users_orders.USERS} </td></tr>
</table>
       <!-- END users_orders --> 
Требуется, чтобы каждый новый пользователь, появлялся с новой строки в таблице. не просто в ячейке , а с новой табличной строки, то есть сделать вложенный цикл для второй строки.
В итоге: для одной закупки- одна таблица с пользователями, для другой -другая.
Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1097
Стаж: 17 лет 8 месяцев
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 206 раз

Re: Синтаксис HTML вывод ЦИКЛа В ЦИКЛЕ

Сообщение Garret_Dark »

kupidon и где проблема?

Код: Выделить всё

'<tr><td>'.implode('</td></tr><tr><td>', $nam[$id]).'</td></tr>'
Добавлено спустя 1 минуту 47 секунд:
Проблема легко решаема, но вы так полностью и не показываете, что именно должно быть в итоге...
Как вариант, можно в $nam[$id] загонять все необходимые данные включая html разметку

Вернуться в «Для авторов (phpBB 3.0.x)»