Форум программистов, компьютерный форум, киберфорум
PHP: Фреймворки
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 16.08.2012
Сообщений: 80

Меняет местами теги

21.07.2016, 14:21. Показов 1487. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Пишу для себе мини-фреймворк. Столкнулся с такой ситуацией когда при выводе страницы браузер меняет местами теги, всё что находящееся шаблона в head выносит в body, а содержимое подключаемой страницы в шаблон в начало, перед doctype. Что делать?
mySite.zip
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.07.2016, 14:21
Ответы с готовыми решениями:

Почему меняет цвета местами?
if(ColorDialog1->Execute()){ UnicodeString b = "#" + IntToHex(ColorDialog1->Color, 6); } Выбираю красный цвет, выводит синий -_- ...

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

Программа, которая меняет слова местами в строке
Здравствуйте! Заранее извиняюсь, знаю , что такой пост уже был, но мне очень нужна ваша помощь. Я начинающий и возникла проблема. --->...

10
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
21.07.2016, 16:41
Лучший ответ Сообщение было отмечено demover123 как решение

Решение

demover123,
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
 
class Controller
{
 
    public $template = 'template';
 
    /**
     * @param $view
     * @param null $params
     */
    public function render($view, $params = null)
    {
        if ($params !== null)
        {
            extract($params);
        }
 
        $folder = lcfirst(str_replace('Controller', '', get_class($this)));
        $path = VIEWS . $folder . '/' . $view . '.php';
 
        // Костыль {
        ob_start();
        require_once($path);
        $content = ob_get_clean();
        // } //костыль
 
        require_once(VIEWS . 'template/' . $this->template . '.php');
    }
 
}
1
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
21.07.2016, 23:58
Цитата Сообщение от Cra3y Посмотреть сообщение
Костыль
Почему костыль? Это как раз и делается с помощью буферизации.
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
22.07.2016, 00:08
Цитата Сообщение от Para bellum Посмотреть сообщение
Почему костыль?
Данный кусок кода получает вывод подшаблона и далее эти данные используются для вставки в основной шаблон.
ИМХО, лучше подключать в основном шаблоне - не потребуется возня с буфером.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
22.07.2016, 00:36
Цитата Сообщение от Cra3y Посмотреть сообщение
Данный кусок кода получает вывод подшаблона и далее эти данные используются для вставки в основной шаблон.
Ну да, всё верно.
Цитата Сообщение от Cra3y Посмотреть сообщение
лучше подключать в основном шаблоне
include в основном шаблоне, а путь передавать в переменной?
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
22.07.2016, 00:59
Цитата Сообщение от Para bellum Посмотреть сообщение
include в основном шаблоне, а путь передавать в переменной?
Зачем же переменной?
Пусть будет класс Renderer, занимающийся сборкой шаблона.
внутри шаблона доступ к инстансу рендера
что то вроде
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Renderer{
    private $tempalte = 'default';
    private $vars = [];
    protected function getPathFor($template) {
        //....
        $return $path;
    }
    public function requirePart($template) {
        return require($this->getPathFor($template));
    }
    public function __construct($template) {
        $this->template = $template;
        // ....
    }
    public function render($vars = []) {
        $this->vars = vars;
        return $this->requirePart($this->template);
    }
}
и в шаблоне
PHP
1
<?php $this->requirePart('content'); ?>
1
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
22.07.2016, 01:35
Видимо я уже конкретно торможу. Но мне кажется, что requirePart запрашивает конкретный файл.
Таким образом, общий шаблон сайта запрашивает дочерний шаблон. Но дочерних-то десятки, обычно.
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
22.07.2016, 02:24
Para bellum, какой именно дочерний шаблон будет подключен зависит от логики getPathFor, а ее можно изменить, расширив Renderer дочерними классами и создавая в разных ситуациях инстанс нужного ребенка Renderer
Как альтернативный вариант - добавить в конструктор параметр - алгоритм получения пути(объект либо функция).
1
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
20.08.2016, 07:09
Cra3y, вот никак не могу додуматься, как же сделать без буферизации. require, само собой направляет данные из шаблона сразу на вывод. Или Вы предлагаете в шаблонах возврат (return) делать, чтобы данные не выводились сразу?
Даже Symfony использует буферизацию.
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
20.08.2016, 07:37
Para bellum, пытался реализовать, что я тут "наболтал"...
Все это с треском провалилось)
И годится только для простейших случаев, когда нет необходимости кешировать результат вывода.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
20.08.2016, 08:20
Цитата Сообщение от Cra3y Посмотреть сообщение
И годится только для простейших случаев, когда нет необходимости кешировать результат вывода.
Плюс есть такой момент: очень удобно возвращать из Application Controller'а Front Controller'у данные для вывода, а тот в свою очередь посылает нужные заголовки, а затем отправляет данные.
Как в Laravel, например, можно написать:
PHP
1
return view('template');
Или, если нужно вернуть массив в виде JSON.
PHP
1
return ['foo'=>'bar'];
То есть в обоих случаях мы делаем возврат данных, не задумываясь о заголовках и т.п. На более низком уровне идёт проверка:
PHP
1
2
if(is_array($response))
    // .. кодируем в JSON
В общем, удобств больше, если данные отправлять пользователю не сразу из Application Controller'а, а на более низком уровне, при завершении работы приложения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.08.2016, 08:20
Помогаю со студенческими работами здесь

Функция, которая меняет значения 2-х динамических массивов местами
Всем здравствуйте. Недавно начал изучать программирование на c++. Изучил тему динамических массивов и их передачу в функцию. Написал...

Программа которая меняет местами значение вещественных переменных а и в
Программа которая меняет местами значение вещественных переменных а и в. Помогите пожалуйста!!))

Написать процедуру, которая меняет цифры в числе местами
Необходимо написать процедуру, которая меняет цифры в числе местами. Т.е. Я ввожу 12345 она изменяет его в 54321. Я хотел бы сам написать...

Написать программу которая меняет местами элементы массива
Уважаемые програмисты помогите решить задачи 1,Написать программу которая меняет местами элементы массива относительно его середины...

Написать программу, которая меняет местами элементы массива
1.Написать программу, которая меняет местами элементы массива относительно его середины (зеркальное отображение элементов). Первый элемент...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru