2015-03-15 2 views
0

Я делаю страницу продуктов; и здесь я хочу показать продукты с их категориями.Категории loop Ссылка PHP

Я могу назвать категории продуктов, но проблема в том, что я хочу поместить ссылки в категории + подкатегории.

Пример:

  • Обувь (ID 422, SubcategoryOf 0)
  • Спорт (ID 531, SubcategoryOf 422)
  • Ади (ID 676, SubcategoryOf 531)

Затем ссылки должны быть:
категория/обувь
категория/обувь/спорт
категория/обувь/спорт/adi

Как это сделать в рамках функции или простой петли? Спасибо.

EDIT: HTML-код с Smarty:

{foreach from=$i.categories item=e} 
    {foreach from=$e item=c name=foo} 
     <a href="{$c}"> 
      {$categories[$c].name} 
     </a> 
    {/foreach} 
{/foreach} 

$ я это продукт, поэтому я называю его категории.

+0

Как выглядит исходный PHP-массив? Как выглядит получившийся HTML? Пожалуйста, добавьте это в свой вопрос. – bloodyKnuckles

+0

Я использую Smarty, теперь я могу получить только название категории и его идентификатор, но я хотел бы получить информацию о его родителях. – Hadrien

+0

Похож, что вы можете найти свой ответ здесь: http://stackoverflow.com/questions/14104230/categories-sub-categories-with-php-mysql-and-smarty – bloodyKnuckles

ответ

0

Это не очень хороший формат данных для вашей цели. Вы должны рассмотреть, чтобы использовать другую структуру данных, например, в следующем (я использую JSON, чтобы представить структуру для простоты)

{ 
    "categories":{ 
     "422":{ 
     "name":"Shoes", 
     "sub":{ 
      "531":{ 
       "name":"Sport", 
       "sub":{ 
        "676":{ 
        "name":"Adi", 
        "sub":null 
        } 
       } 
      } 
     } 
     } 
    } 
} 

Таким образом, это намного проще создавать ссылки

{foreach from=$i.categories item=e} 
    {foreach from=$e.sub item=c} 
     <a href="{$e.name}/{$c.name}"> 
      {$categories[$c.name].name} 
     </a> 
    {/foreach} 
{/foreach} 

я, возможно, испортил html, но я надеюсь, что вы поймете мою мысль.

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

{ 
    "categories":{ 
     "422":{ 
     "name":"Shoes", 
     "SubcategoryOf":0 
     }, 
     "531":{ 
     "name":"Sport", 
     "SubcategoryOf":422 
     }, 
     "676":{ 
     "name":"Adi", 
     "SubcategoryOf":531 
     } 
    } 
} 

Тогда функция должна иметь доступ к полному списку категорий, предположительно, в $categories переменном примере ниже

function getRecLink($category){ 
    global $categories; 

    if($category->SubcategoryOf){ 
     return getRecLink($categories[$category->SubcategoryOf]) . '/' . $category->name; 
    }else{ 
     return $category->name; 
    } 
} 

Вы можете увидеть рабочий пример here.

+0

Я думаю, что это хорошее начало, но это не так, как мне нужно, если я позвоню ребенку ребенка, результат будет подобен Kit/Techno/Games, но мне нужны ссылки, и результат должен быть таким, как я сказал, первым имеет свое имя, второе имеет свое родительское имя + его имя, а его дочерний элемент имеет свое имя и фамилию + родительское имя + его имя Пример: http://sandbox.onlinephpfunctions.com/code/cf297cbea27a5af8b77be7d53f1671720c1b0873 Здесь URL-адрес просто ключевое значение (в моей базе данных у меня есть ключевое значение), но я хочу, чтобы это было так, как я уже говорил. В этом примере должен быть . – Hadrien

+0

@Hadrien Это именно то, что я показал. Я даже загрузил живую демонстрацию. –

+0

Нет, это не так. Самое главное, что я хочу сделать, это ссылки, и, как я сказал в своем комментарии, я не могу делать, как хочу, чтобы получить родителя + ребенка в ссылка. – Hadrien

Смежные вопросы