Помогите перевернуть хлебные крошки

VANHALEN

Новичок
Здравствуйте! Я не знаю с той ли стороны вообще я подошёл к вопросу, но хлебные крошки реализовал вот так
PHP:
$result = mysql_query("SELECT `page`,`id`, `pid`, `menu` FROM `menu` WHERE `page` = '".$_GET['page']."' LIMIT 1");    
while ($row = mysql_fetch_array($result)) 
	{
			$result = mysql_query("SELECT `page`,`id`, `pid`, `menu` FROM `menu` WHERE `id` = ".$row['pid']." LIMIT 1");
				echo  ' / '.$row['menu'];	         
	}
Ну и получилась херомантия конечно.
/ Немецкое / Разливное / Пиво / Магазин - Тоесть строго в обратном порядке. Мне бы хоть знать в какую сторону копать. Без опыта то и думалка не варит. Тоесть получается я беру конечный документ и узнаю кто у него родитель, потом кто дедушка и так до конца. Но вывести то надо наоборот. Может как то спрашивать надо по-другому?
 

Absinthe

жожо
Сначала получаешь данные и подготавливаешь. Потом отображаешь.
Нельзя получить немного, отобразить, снова получить, отобразить. Результат этого ты сейчас и наблюдаешь.

И тебя не беспокоит, что у тебя кусок кода скопипащен? Но это так, мелочи уже.
 

VANHALEN

Новичок
Сначала получаешь данные. Потом отображаешь
Да я впринципе тоже так подумал, но с этим у меня большие проблеммы :). Я просто думал можно ли именно получать их в другом порядке. Уж очень приглянулась идея - 8 строчек кода, включая с форматированием. Думал перевернуть чего нибудь и всё.

Кстати крошки перевернул с помощью CSS. Но я думаю, это всё-таки не правильный выход.
 

Вложения

VANHALEN

Новичок
Чем больше ты это стараешься игнорировать - тем тебе же хуже.
Да я то в этом постоянно убеждаюсь, но стараюсь решать проблеммы только по мере их поступления, иногда чуть заранее. А не так, чтобы выучи всё за 10 лет, чтобы потом 3 дня использовать 2% знаний.

Ну мы пойдём другим конём. Впринципе $row уже ведь массив? Но походу отсортировать его сразу не получается, потому что внутри цикла while он ещё не закончил формироваться. А результат мы выводим в этом же цикле.. Тогда получается что нужно взять массив и в цикле перезаписать его ещё в один массив, который уже потом отсортировать и вывести. Так?

А сортировать теоретически я могу только по одному значению массива - по id. Потому, что он auto incriment и значит ребёнок не может иметь id меньше родителя, потому что всяко был добавлен позже. Хотя остаётся один вопрос.. А если он был перенесён потом?
 

Absinthe

жожо
Сами запросы пока трогать не будем.

Тебе нужно сложить крошки в новый массив $breadcrumbs. И потом его реверсировать.

А еще тут лучше подойдет цикл с постусловием, а не с предусловием.
 

VANHALEN

Новичок
Только сейчас заметил и убрал 2 лишние фигурные скобки внутри цикла. И главное - работало :)
 

fixxxer

К.О.
Партнер клуба
Отучайся писать такую лапшу, иначе будешь сталкиваться все с большими и большими трудностями.

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

Вместо пачек echo надо использовать шаблоны. Хотя бы, для начала, так:

PHP:
<?php

include 'lib/user.php';
include 'lib/article.php';

$user = loadCurrentUser();
$article = loadArticle($_GET['article_id']);

?>
<html>
...
<?= e($user['login']) ?>
...
<?= e($article['title']) ?>
...
 

VANHALEN

Новичок
Отучайся писать такую лапшу, иначе будешь сталкиваться все с большими и большими трудностями.
Ну во-первых свой велосипед ещё никому вреда не приносил, а во-вторых, я же пока как-то справляюсь. Будет необходимость - научусь. Человек подсказал, я воспринял, полез изучать вопрос. Чё раньше времени то паниковать, мне фейсбуки не кодить. А потом мне интересен процесс. И интересно как я со временем дошёл сам, своей головой, до готовых правильных решений, подтверждения которым нахожу в чужих примерах.
Выводить в браузер все нужно единственной операцией в конце, когда все данные уже подготовлены и сложены в массив.
Ну я в принципе уже близок к этому. А вот у вас похоже неправильное представление о последовательности постижения простых вещей. Вы как бы отталкиваетесь уже от конечного результата. Простейший пример: начните с азов читать любой мануал, или учебник. Все решения в нём вы бы как раз назвали говнокодом. И этот говнокод таки нужен, как неотьемлемая часть эволюции. Иначе зачем всю эту хрень пишут? Ведь так?
 

fixxxer

К.О.
Партнер клуба
То решение, которое я предложил, я бы тоже назвал говнокодом. ;) Но это один шаг вперед от того, что сейчас есть у тебя, мне показалось, что ты готов его сделать. Ну может и не готов - тебе виднее.
 

VANHALEN

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

VANHALEN

Новичок
Во... Перевернулось.
PHP:
$result = mysql_query("SELECT `page`,`id`, `pid`, `menu` FROM `menu` WHERE `page` = '".$_GET['page']."' LIMIT 1");    
while ($row = mysql_fetch_array($result)) 
    {
            $result = mysql_query("SELECT `page`,`id`, `pid`, `menu` FROM `menu` WHERE `id` = ".$row['pid']." LIMIT 1");
                $breadcrumbs[] =  $row['menu'];             
    } 
echo implode('/',array_reverse ( $breadcrumbs ));
Только теперь сделать надо чтобы, если у родителя нет детей то крошек не было.. Ну если просто "главная", или "о фирме", то зачем показывать то два раза?
 

VANHALEN

Новичок
Ну вот собстенно и всё. Добавил ссылки и проверку, чтобы не показывались крошки, если у родителя нет детей.
PHP:
$result = mysql_query("SELECT `page`,`id`, `pid`, `menu` FROM `menu` WHERE `page` = '".$_GET['page']."' LIMIT 1");    
while ($row = mysql_fetch_array($result)) 
    {
            $result = mysql_query("SELECT `page`,`id`, `pid`, `menu` FROM `menu` WHERE `id` = ".$row['pid']." LIMIT 1");
			$breadcrumbs[] =  '<a href="'.$row['page'].'">'.$row['menu'].'</a>';           
    } 
if (count($breadcrumbs) >= '2') 
	{
		echo implode(' &#8226; ',array_reverse ( $breadcrumbs )); 
	}
 

VANHALEN

Новичок
Убери SQL-инъекцию и переделай на цикл с постусловием.
На будущее наверное да, а вообще сейчас это бесполезно.. сайт.ру/magazin/frukty/yabloki - что и куда ты здесь подставишь, если ты даже не знаешь что из них что, где раздел, где алиас, где контроллер, где данные? Макимум, что ты добьёшься - это сообщения об ошибке и то врядли. Но главный вопрос - а нахрена? Какая выгода от того, что ты удалишь например страничку с контактами какой-то фирмы "акала какала" по продаже гвоздей и шурупов? Она через пол часа будет востановлена.

PHP:
$result = mysql_query("SELECT `page`,`id`, `pid`, `menu` FROM `menu` WHERE `page` = '".$_GET['page']."' LIMIT 1");    
do 
    {
            $result = mysql_query("SELECT `page`,`id`, `pid`, `menu` FROM `menu` WHERE `id` = ".$row['pid']." LIMIT 1");
			$breadcrumbs[] =  '<a href="'.$row['page'].'">'.$row['menu'].'</a>';           
    } 
while ($row = mysql_fetch_array($result));
if (count($breadcrumbs) >= '2') 
	{
		echo implode(' &#8226; ',array_reverse ( $breadcrumbs )); 
	}
По поводу цикла. Чё то не работает так. Что-то я неправильное навыдумывал походу.
 

Absinthe

жожо
На будущее наверное да, а вообще сейчас это бесполезно.. сайт.ру/magazin/frukty/yabloki - что и куда ты здесь подставишь, если ты даже не знаешь что из них что, где раздел, где алиас, где контроллер, где данные? Макимум, что ты добьёшься - это сообщения об ошибке и то врядли. Но главный вопрос - а нахрена? Какая выгода от того, что ты удалишь например страничку с контактами какой-то фирмы "акала какала" по продаже гвоздей и шурупов? Она через пол часа будет востановлена.
Окей, я больше тебе подсказывать не буду, никогда еще не видел человека, который намеренно пытается сделать максимально херовый говнокод, как я понял из этой цитаты.
 
Сверху