2012-04-18 2 views
0

Я в настоящее время пытаюсь использовать cakephp для создания моей собственной небольшой CMS в php. Чтобы было легко изменить веб-сайт. Прежде всего я не веб-программист, это просто для свободного времени.default.ctp получить информацию от контроллера cakephp

У меня есть контроллер Кнопка и кнопка могут иметь несколько категорий. , поэтому я пытаюсь загрузить его в default.ctp, чтобы это меню загружалось для каждой страницы.

код default.ctp:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title> 
     <?php __('eg'); ?> 
     <?php echo $title_for_layout; ?> 
    </title> 
    <?php 
    echo $this->Html->css('cake.generic.style'); 
    echo $scripts_for_layout; 
    ?> 
</head> 
<body> 
    <div class="wrapper"> 
     <div class="header"> 
      <h1>Electro Geers Bvba</h1> 
     </div> 
     <div id="navMenu"> 
      <?php 
      foreach ($buttons as $button) { 
       echo '<ul>'; 
       echo '<li><a href="' . h($button['Button']['naam']) . '.html">' . h($button['Button']['naam']) . '</a>'; 
       if (!empty($button['Category'])) { 
        echo'<ul>'; 
        foreach ($button['Category'] as $category) { 
         echo '<li><a href="' . $category['naam'] . '.html">' . $category['naam'] . '</a></li>'; 
        } 
        echo'</ul>'; 
       } 
       echo '</li>'; 
       echo '</ul>'; 
      } 
      ?> 
      <br class="clearFloat" /> 
     </div> 
     <div class="contents"> 
      <h3>Sectionale poorten en Hekwerken</h3> 
      <?php echo $content_for_layout; ?> 

     </div> 
     <div class="footer"> 
      Copyright © 2012 - 2017 
     </div> 
    </div> 
</body> 

Я знаю, что CakePHP нормально probaly не должны использоваться как этот путь, но я хочу знать, если это возможно? Как я могу загрузить имя кнопки в default.ctp?

В настоящее время я получаю эту ошибку:

Notice (8): Undefined variable: buttons [APP\View\Layouts\default.ctp, line 20] 

Предупреждения (2): Недействительный аргумент для Еогеаспа() [APP \ View \ Layouts \ default.c, строка 20]

ответ

3

в вашем AppController:

$this->loadModel('Button'); 
$buttons = $this->Button->find('all'); 
$this->set(compact('buttons')); 

Это заставит каждую страницу запроса buttons таблицу и передать результаты в представление, которое затем будет доступен через ваш $buttons переменная.

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

Есть много вариантов, но один из них, который я видел и хотел, должен сохранить меню в файле XML, - тогда в любое время ваши buttons будут обновлены/отредактированы/добавлены/удалены ... и т.д., обновите XML файл.

+0

Спасибо за ваш комментарий! –

+0

В какой метод следует поместить этот код? – powtac

+0

powtac: в AppController beforeFilter() Просто убедитесь, что все ваши контроллеры вызывают parent :: beforeFilter() в действии THEIR beforeFilter. – Dave

1

Вы также можете поместить div id = "navMenu" в элемент, а затем использовать requestAction. См. Эту ссылку от одного из разработчиков Cake.

http://mark-story.com/posts/view/how-using-requestaction-increased-performance-on-my-site

+0

Благодарим вас за комментарий! –

+0

+1 upvote - Мне нравится ваш ответ лучше, чем у меня - я совсем забыл об этом. – Dave

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