За последние 24 часа нас посетили 17786 программистов и 1718 роботов. Сейчас ищут 933 программиста ...

mvc - как передать из справочника в view?

Тема в разделе "PHP для новичков", создана пользователем viktor72, 20 май 2021.

  1. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    а если так:

    index.php
    PHP:
    1. $content = render('main.php',['items'=>$cat]);
    2.  
    3. echo render('content.php', ['title'=>'Мой рендер', 'content'=>$content]);
    content.php
    PHP:
    1. <title><?php echo $title; ?></title>
    2. <div class="content">
    3.      this page content
    4.      <?php echo $content; ?>
    5.    
    6. </div>
    main.php
    PHP:
    1. <div class="main">this page main
    2. <?php
    3. foreach($items as $item){
    4.    
    5.     echo render('menu.php', ['item'=>$item]);
    6. }
    7. ?>
    то есть я создаю рендер с выводом информации в файле верхнего уровеня.

    PHP:
    1. <div class="menu">this page menu
    2.  
    3. <?php
    4. echo $item['link'];
    5.  
    6. ?>
    7.  
    8. </div>
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Чтение - обязательное требование. Да, готовый, но я его дал, что показать, какие требования к шаблонизатору, чтоб им нормально можно было пользоваться. В любом случае, всякие меню надо подключать на уровне шаблонов, хотя бы инклюдами. А вообще, нужно сделать систему лейаутов.
     
    viktor72 нравится это.
  3. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    Английский изучаю.
    Ещё раз читаю мануал Plates. Спасибо.
    Сейчас кто то использует php шаблоны в чистом виде или все используют только шаблонизаторы twig, blade и т.д.?
    В предыдущем своем посте я выложил свой код, где вывод меню я сделал на уровне шаблона маин. Это подразумевалось? На правильном пути?

    Планирую разобраться , до уровня чтоб создать свой простой шаблонизатор а затем изучать шаблонизатор с рынка ИТ.
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Крупные проекты на фрейморках. У меня всё крупное на Laravel, там blade, естественно. Симфонисты Twig юзают. Смарти - не знаю, жив ли ещё. На небольших проектах мне нравится Plates

    Ну и конечно, всё чаще фронт в принципе делается не на PHP, а на какаом-нибудь VueJS, React, Angular.
     
    viktor72 нравится это.
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Ну, можно тупо в макете сделать
    PHP:
    1. <?php $menu = require __DIR__.'config_menu.php'; ?>
    2. <!DOCTYPE html>
    После подключения тут же отрендерить в памяти или рендерить прямо на месте вставки меню в шаблоне какого-то родительского блока (шапки сайта) или в собственном шаблоне меню. Вот это меню вроде рендерится прямо в шаблоне сайдбара (проверьте в шаблоне). Подключается во фронте, как часть конфига, а не в макете, но не суть. Главное обычные контроллеры про него ничего не знают.

    Используют.
     
    viktor72 нравится это.
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    P.S. Как ранее писал, можно рендерить меню в отдельном процессе (по крону), а в макете делать
    PHP:
    1. <?php $menu = file_get_contents(...); ?>
    2. ...
    3. <?= $menu ?>
    или просто
    PHP:
    1. <?= readfile(...) ?>
    Только нужно какой-нибудь синхронизатор прикрутить.
     
    viktor72 нравится это.
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Слеш пропустил.
     
    viktor72 нравится это.
  8. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    не знаю что такое крон
    что такое синхронизатор пока не знаю
    --- Добавлено ---
    пока что я дошел до такого уровня:
    controler.php
    PHP:
    1. $items = render('main.php', ['items'=>$cat]);  
    2.    
    3. $render = render('content.php', ['content'=>$items]);
    main.php
    PHP:
    1. foreach($items as $item){
    2.    
    3.     echo render('menu.php', ['item'=>$item]);
    4. }
    в файле меню вывожу меню:
    menu.php
    PHP:
    1. echo $item['link'];
    2. echo $item['text'];
     
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    http://u75.ru/cron

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

    Я уже второй раз у вас вижу рендер меню внутри цикла. ЧЁ шаблон для одного пункта меню что ли?!
    --- Добавлено ---
    Обычно цикл прямо в шаблоне меню находится. Вы нашли тот пример, на который я выше указывал?
     
    viktor72 нравится это.
  10. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    Всё что мне высылали я перечитывал по нескольку раз. Вывод - надо спуститься ниже и изучить то что я её не знаю.
    для наглядности сократил.
    PHP:
    1. $items = render('main.php', ['items'=>$cat, 'content_main'=>$content_main, 'x'=$x', 'z'=>$z]);