Как начать работу с темами PHP?

У меня есть веб-приложение, разработанное с использованием PHP. Я хочу, чтобы мои пользователи выбирали темы для своих страниц во всем приложении.

  • С чего следует начать перед использованием тем PHP?

Что я должен знать о темах в приложении PHP?

Изменить:

Мой вопрос о темах касается только изменения цвета макета, а не изображений.

Предположим, у пользователя My ADMIN будет белый и оранжевый цвета, а у моего штатного пользователя — белый и зеленый...

Как это можно сделать в PHP с помощью CodeIgniter?


person Community    schedule 01.02.2010    source источник


Ответы (6)


Есть много направлений, по которым вы можете пойти с этим.

1) "CSS ДЗЕН"

Здесь разметка остается неизменной, но вы полностью меняете дизайн, просто используя CSS и изображения. Очень хорошо продемонстрировано на http://www.csszengarden.com/.

2) Стиль MVC

Здесь вы создаете модель, которая представляет данные страницы, а затем передаете ее в представление, которое содержит некоторые встроенные операторы эха. Идея состоит в том, что вы можете отправить одну и ту же модель в совершенно другое представление, чтобы она выглядела совершенно по-другому, HTML и все такое. Cake PHP — хорошее начало для этого: http://cakephp.org/

Пример:

<div class="content">
    <? echo $Page->Content ?>
</div>

3) Микроразметка

С помощью этого метода вы добавляете свои собственные «специальные теги» на HTML-страницу. Затем вы читаете свою простую HTML-страницу и заменяете специальные теги информацией, которую хотите отобразить. Это хорошо, если вы хотите, чтобы ваши шаблоны были узнаваемы для HTML-парней, которые не знают PHP и могут сломать PHP-код в приложении MVC.

Пример:

<div class="content">
    <#Content#>
</div>

Из всего этого MVC — это очень структурированный способ достижения того, что вы хотите, однако я перечислил другие варианты, поскольку они подходят для конкретных сценариев, которые могут иметь отношение к вам.

Я реализовал эту концепцию во всех трех из них, в ситуациях, подходящих для каждой из них.

Относительно редактирования в вопросе

Я предполагаю, что у вас будет «что-то», представляющее вашего пользователя, так что это так же просто, как:

(Если вы просто хотите переопределить несколько настроек...)

<link href="style.css" type="text/css" rel="stylesheet">
<?php if ($User->Type === USER_ADMIN) {  ?>
<link href="admin.css" type="text/css" rel="stylesheet">
<?php } ?>

Вы можете настроить этот пример следующими способами:

  • Используйте оператор switch, если будет много типов пользователей
  • Если замена полная, а не несколько переопределений, вы можете полностью поменять таблицу стилей.
person Fenton    schedule 01.02.2010

Обычно вы настраиваете файлы шаблонов, которые содержат HTML и CSS, и встраиваете сгенерированные значения PHP во время выполнения.

Наилучший подход к этому — разместить тему в отдельном каталоге, не содержащем кода, только переменные шаблона, такие как {mainmenu}, {backbutton}, {content}... вы поняли, о чем я. Затем они заполняются вашим PHP-скриптом, возможно, с помощью механизма шаблонов, такого как Smarty< /a> (Здесь не нужно изобретать велосипед).

Существует также подход с разметкой PHP непосредственно в файле (файлах) шаблона, например echo $xyz;, хотя это вполне допустимая практика, которую я часто использую сам, я рекомендую использовать механизм шаблонов вместо использования разметки PHP в code, если вам нужна надежная, ориентированная на будущее система шаблонов, потому что:

  • Во-первых, дизайнер может сломать меньше вещей при работе с HTML.

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

  • В-третьих, при использовании механизма шаблонов у вас есть возможность добавить кэширование там, где это необходимо без дополнительной работы. Невозможно со сценарным подходом. Да, в веб-приложении вы не сможете кэшировать так много, но с большим количеством данных будут случаи, когда это поможет пользователю.

  • В-четвертых, и это наименее важно, это затрудняет экспорт вашего шаблона в другие приложения и импорт шаблонов из других приложений.

Подход CSS Zen, упомянутый Sohnee, отлично подходит для веб-сайтов, но будет слишком ограниченным для веб-приложения, которое использует сложные элементы ввода, меню на основе JS и тому подобное. Слишком часто эти элементы нужно изменять и настраивать в разметке.

person Pekka    schedule 01.02.2010

Если вы посмотрите мою библиотеку шаблонов CodeIgniter, там кратко объясняется, как вы можете настроить темы и макеты (эквивалент верхнего и нижнего колонтитула).

Если вы настроили глобальный код, такой как хук или MY_Controller, вы можете динамически установить свой тема на основе вошедшего в систему пользователя, типа пользователя и т. д.

Eg:

if($user->role == 'admin')
{
    $this->template->set_theme('admin_skin');
}

else
{
    $this->template->set_theme($user->theme);
}

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

person Phil Sturgeon    schedule 01.02.2010

Решения CMS

Magento и Wordpress упаковывают все файлы, связанные с темой, в свои собственные отдельные каталоги. Они содержат серверный код, таблицы стилей, изображения и javaScript для темы. По сути, пользователь выбирает каталог для использования, который влияет на макет и стиль страницы.

Простой подход

Гораздо проще начать с того, что принять фактическое содержание, например. HTML-код страницы останется прежним, но пользователь сможет выбирать из различных таблиц стилей CSS.

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

person Jon Winstanley    schedule 01.02.2010

Если у вас действительно хороший семантический HTML, достаточно изменить файлы CSS. Разве что изменения в дизайне будут действительно тяжелыми. Тогда имеет смысл предоставить PHP-шаблоны, которые состоят из каких-то модулей: переменных, которые содержат определенную структуру HTML, такую ​​как навигация или боковая панель и т. д.

person antpaw    schedule 01.02.2010
comment
Вы также можете помочь темам CSS, включив несколько «бесполезных» пустых разделов, которые таблица стилей может расположить и поместить в них фоновые изображения. - person bobince; 01.02.2010

Для тем вам не нужен PHP. Просто определите свои темы в CSS (лучше всего использовать один файл для каждой темы) и используйте простой инструмент выбора JavaScript, как на этом сайте: http://www.fotokluburan.cz/switchcss.js.

person Rusty Horse    schedule 01.02.2010