Создать тему с нуля можно. Но это очень большая и трудоёмкая задача. Поступать так стоит лишь в том случае, когда вам нужны какие-то специфичные потребности, что-то уникальное.
Самым простым и быстрым решением будет изменение любой существующей темы, которая больше подходит под ваши нужды.
Однако создать каркас темы, которая будет работать можно достаточно быстро. Для этого нам потребуется создать папку темы, info файл темы(как в модуле), и несколько шаблонов.
Давайте назовём тему my_theme.Папку с темой помещаем в sites/all/themes.
В файле my_theme.info пишем.
name = my_theme description = Моя первая тема core = 7.x regions[content] = Content regions[sidebar_first] = Sidebar First regions[footer] = Footer stylesheets[all][] = css/style.css
Таким образом, мы определим 3 региона и подключим 1 файл со стилями.
Далее создаем папки css и templates.
Теперь делаем шаблон страницы и ноды. Из курса темизации вы должны помнить, как они называются.
Создаем шаблон страницы. Называем его page.tpl.php
<div id="page_wrapper"> <header id="header" > <!-- Шапка сайта --> <?php if ($site_name || $site_slogan || $logo): ?> <!-- если задано имя сайта, слоган или лого выводим блок заголовков --> <hgroup> <?php if ($logo): ?> <!-- Если задан логотип - выводим логотип --> <a title="<?php print t('Home'); ?>" rel="home" href="<?php print $front_page; ?>"> <img src="<?php print $logo; ? />" alt="<?php print t('Home'); ?>"/></?php></?php></a> <?php endif; ?> <?php if ($site_name): ?> <!-- Если заданно имя сайта - выводим --> <h1><a title="<?php print t('Home'); ?>" rel="home" href="<?php print $front_page; ?>"> <?php print $site_name; ?></?php></?php></a></h1> <?php endif; ?> <?php if ($site_slogan): ?> <!-- Если задан слоган сайта - выводим --> <h2><?php print $site_slogan; ?></?php></h2> <?php endif; ?> </?php></?php></?php></?php></?php></?php></hgroup> <?php endif; ?> </?php></?php></header> <aside id="left_column"> <!-- Левая колонка c регионом sidebar_first --> <?php print render($page['sidebar_first']); ?> </?php></aside> <div id="article_wrapper" > <!--Правая колонка--> <?php print $breadcrumb; /* Выводим "Выводим "хлебные крошки" */ ?> <?php print $messages; /* Выводим сообщения системы */ ?> <!-- Заголовок с суффиксом и преффиксом --> <?php print render($title_suffix); ?> <?php if($title): ?> <h1><?php print $title; ?></?php></h1><?php endif; ?> <?php print render($title_suffix); ?> <?php print render($tabs); /* Выводим табы */ ?> <?php print render($page['content']); /* Выводим регион "контент" */ ?> </?php></?php></?php></?php></?php></?php></?php></?php></div> <footer> <!-- подвал сайта с регионом footer --> <?php print render($page['footer']); ?> </?php></footer> </div>
О том, какие переменные можно использовать – можно посмотреть в файле modules/system/page.tpl.php
Аналогично создаем node.tpl.php
<div id="node-<?php print $node->nid; ?>" class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>> <?php print render($title_prefix); ?> <?php if (!$page): ?> <h2<?php print $title_attributes; ?> class="node_title"> <a href="<?php print $node_url; ?>"><?php print $title; ?></?php></a> <?php endif; ?> <?php print render($title_suffix); ?> <div class="meta_wrapper"> <?php if ($display_submitted): ?> <span class="meta" role="contentinfo"> <?php print $submitted; ?> </?php></span> <?php endif; ?> <?php print render($content['field_tags']); ?> <?php endif; ?> </?php></?php></?php></?php></?php></div> <?php endif; ?> <article <?php print $content_attributes; ?>> <?php hide($content['comments']); hide($content['links']); hide($content['field_tags']); print render($content); ?> </?php></article> <div> <?php print render($content['links']); ?> </?php></div> <?php if ($content['comments'] && $page): ?> <section class="comments"> <?php print render($content['comments']); ?> </?php></section> <?php endif; ?> </?php></?php></?php></?php></?php></?php></h2<?php></?php></?php></?php></?php></div>
И block.tpl.php
<div id="<?php print $block_html_id; ?>" class="<?php print $classes; ?>"<?php print $attributes; ?>> <?php print render($title_prefix); ?> <?php if ($block->subject): ?> <h2<?php print $title_attributes; ?>><?php print $block->subject ?> <?php endif;?> <?php print render($title_suffix); ?> <div class="content"<?php print $content_attributes; ?>> <?php print $content ?> </?php></div> </?php></?php></?php></h2<?php></?php></?php></?php></?php></div>
Файлы block.tpl.php, page.tpl.php и node.tpl.php кладем в подпапку templates нашей темы.
Выглядеть это будет так.
Также можно посмотреть шаблоны в других папках системных модулей и применить в своей теме. Главное – после каждого перекрытия системного шаблона необходимо очистить кэш друпала.
И в папке css создаем файл style.css следующего содержания.
#page_wrapper{ margin: 0 auto; width:800px; } width:100%; background: #87d69e; } #left_column{ float:left; width:200px; background: #d4b354; } #article_wrapper{ margin-left:220px; padding:0 10px; } article { margin-right:25px; margin-left: 5px; } nav{ text-align:center; margin: 10px; border-bottom: 1px solid #3399CC; } ul.main-menu{ list-style-type: none; font-size: 30px; margin:0; padding:0; text-transform:lowercase; } ul.main-menu li{ display: inline-block; margin:0; padding:0; } ul.main-menu li a{ display:block; margin:0; padding:5px; text-decoration:underline; } ul.main-menu li a:hover{ color: #3399CC; } ul.main-menu li a.active:hover{ color:#444; } .breadcrumb { padding: 5px; margin:0; font-size: 8pt; font-style: italic; } .page_title{ color: #01637E; } .node_title a{ display:block; margin-right:25px; padding:5px 5px 0 10px; color: #01637E; background: rgba(102,153,204, 0.5); border-radius:8px; -webkit-border-radius:8px; -moz-border-radius:8px; -khtml-border-radius:8px; } .node_title a:hover{ background: rgba(102,153,204, 0.9); } .field-type-taxonomy-term-reference { border-left: solid 1px #3399CC; display: inline; margin-left: 3px; padding: 0 0 0 3px; } ul.links li a{ padding: 2px 4px; display:inline-block; font-size:10pt; background: rgba(102,153,204, 0.5); border-radius:4px; -webkit-border-radius:4px; -moz-border-radius:4px; -khtml-border-radius:4px; }
Также в папке темы может быть файл template.php , в котором используются различные хуки, производятся настройки темы и т.д. Он не обязателен, но мы его создадим.
И напоследок поместим в папку темы логотип, он должен называться logo.png .Размеры произвольны. Я взял уже готовый рисунок.
Теперь папка темы выглядит следующим образом.
Заходим в настройки тем, выбираем нашу тему и смотри что получилось.
Как видите – тема успешно работает. Стили, блоки и регионы есть. Но для того, чтобы тема была вменяемой – придется потратить на неё большое количество времени .
Гость 2016/11/19
Здравствуйте!
Везде встречаю выражение "в файле темы template.php реализуется логика темы". Не совсем понятно какая именно. В этом файле доступные стандартные объекты Друпал, например нода? В нем можно реализовать код, реализуемый в модуле, или сниппете? Или там есть какие-то особые правила реализации?
Админ 2016/11/21
Добрый день.
В этом файле можно препроцессить страницы, ноды, хлебные крошки, филды и всё что касается темизации.
Нода - это глобальная переменная и по-идее она доступна во всех файлах, нужно лишь в начале функции написать global $node; Если не получится - то смотреть в $vars, например:
Нет, функционал лучше надо писать в модулях. Некоторые вещи можно конечно реализовать как в теме, так и в модулях, но как правило всё пишут в модулях.
Гость 2016/11/06
Здравствуйте!
Не знаю как правильно сформулировать вопрос, но попробую ....
Можно ли в друпал 7 получить объект ноды вне файлов шаблонов темы? Т.е. например при обращении к урл node/1 подключались JS и CSS файлы (т.е. шаблон html.tpl.php таки придется задействовать) формировались объекты node, user и т.д. , но далее ничего не выводилось, т.е. белый экран.
Для чего это нужно?... . Ну например чтобы навесить какой нибудь frontend интерфейс, используя в качестве backend_a друпал.
Админ 2016/11/08
Добрый день.
Если только для этого - можете убрать всю лишнюю вёрстку из html.tpl.php в папке темы.
А вообще, если полностью фронтенд отделить от друпала, то:
1) Создаёте на сервере 2 папки - в одной друпал, во второй фронт(любой фреймворк, к примеру)
2) Создаёте 2 хоста backend.site.com - смотрит на друпал и site.com - на фронт.
3) бекенд закрываете базовой авторизацией и сидите там под админом, пользуетесь админкой друпала
4) Фронту говорите в каких таблицах что лежит.
Таким образом фронт работает чисто на read-only БД друпала.
Данный блог, кстати, работает именно так. Админка на друпал, а фронт на Laravel
Гость 2016/11/09
Благодарю!
Очень ценная для меня информация.
Гость 2013/03/29
Drupal - это такая штука, которую надо упорно, долго и нстойчиво ковырять, если хотите что-то понять. У меня на изучение админки ушло 8 месяцев. Сейчас принялся за темизацию. Надеюсь разобраться, готовлюсь к кровопролитному и упорному сражению. На zvirec.com есть видеокурсы, там что-то можно понять, тут тоже неплохо автор излагает, есть хоть какая-то система. Вот так, склеивая по кусочкам, можно разобраться.
Гость 2012/12/25
Выдал ошибочку
Parse error: syntax error, unexpected T_IF in /Applications/XAMPP/xamppfiles/htdocs/mebel/sites/all/themes/mebel4u/templates/page.tpl.php on line 22:
Админ 2012/12/26
А что у вас в строках 20-24 ?
Гость 2012/05/09
Убрал version = 7.13, почистил кэш, но ничего не дало. Всё так же осталось.
Так с Вами можно через скайп связатся или это исключено?
Со мной не нужно сидеть и создавать мою тему. Я хотел бы научится этому сам. Мне нужно просто обьяснить, что я не так делаю и почему возникают ошибки.
Уроков по этому делу много в инете, но читать и смотреть это одно, а когда возникают проблемы, то спросить не у кого. В этом то вся беда.
Гость 2012/05/09
Ну а что может быть в инфофайле, там вроди ничего сложного.
name = immobilien
description = immobilien
version = 7.13
core = 7.x
engine = phptemplate
stylesheets[all][] = css/immobilien.css
scripts[] = js/script.js
regions[help] = Help
regions
regions[header] = Header
regions[header_line] = Header Line
regions[navi_language] = Navigation Language
regions[navi_menu] = Navigation Menu
regions[content] = Content
regions[content_search] = Content Search
regions[footer] = Footer
По моему тут всё в порядке.
Если Вас не затруднит, можно было бы с Вами лично связатся для решения проблемы, через скайп например. Ну если конечно Вы знаете как помочь.
Гость 2013/04/19
У тебя ошибка - не закрыт один regions, который после Help. Решение проблемы с Notice: Undefined index: name... - в кодировке файла .info, исправляется перекодированием в ANSI (в notepad++, например)
Админ 2012/05/09
Попробуй убрать version = 7.13
А так тут сложно что-то сказать..нужно полностью смотреть тему.. И в процессе её создания всегда смотреть что получается и на каких этапах валятся ошибки.
Проще готовую тему переделать под себя.
Гость 2012/05/08
Ну можно конечно.
Сообщение об ошибке
• Notice: Undefined index: name в функции system_sort_modules_by_info_name() (строка 925 в файле Z:\home\3immobilien.de\www\modules\system\system.admin.inc).
• Notice: Undefined index: name в функции system_sort_modules_by_info_name() (строка 925 в файле Z:\home\3immobilien.de\www\modules\system\system.admin.inc).
• Notice: Undefined index: name в функции system_sort_modules_by_info_name() (строка 925 в файле Z:\home\3immobilien.de\www\modules\system\system.admin.inc).
• Notice: Undefined index: name в функции system_sort_modules_by_info_name() (строка 925 в файле Z:\home\3immobilien.de\www\modules\system\system.admin.inc).
• Notice: Undefined index: name в функции system_sort_modules_by_info_name() (строка 925 в файле Z:\home\3immobilien.de\www\modules\system\system.admin.inc).
• Warning: uasort() [function.uasort]: Array was modified by the user comparison function в функции system_themes_page() (строка 131 в файле Z:\home\3immobilien.de\www\modules\system\system.admin.inc).
• Notice: Undefined index: name в функции system_themes_page() (строка 140 в файле Z:\home\3immobilien.de\www\modules\system\system.admin.inc).
• Notice: Undefined index: name в функции system_themes_page() (строка 158 в файле Z:\home\3immobilien.de\www\modules\system\system.admin.inc).
• Notice: Undefined index: name в функции system_themes_page() (строка 159 в файле Z:\home\3immobilien.de\www\modules\system\system.admin.inc).
• Notice: Undefined index: name в функции system_themes_page() (строка 182 в файле Z:\home\3immobilien.de\www\modules\system\system.admin.inc).
• Notice: Undefined index: name в функции theme_system_themes_page() (строка 2708 в файле Z:\home\3immobilien.de\www\modules\system\system.admin.inc).
И ещё после очистке кэша выдаёт несколько.
Сообщение об ошибке
• Notice: Undefined index: name в функции block_menu() (строка 146 в файле Z:\home\3immobilien.de\www\modules\block\block.module).
• Notice: Undefined index: name в функции block_menu() (строка 165 в файле Z:\home\3immobilien.de\www\modules\block\block.module).
• Notice: Undefined index: name в функции system_menu() (строка 647 в файле Z:\home\3immobilien.de\www\modules\system\system.module).
Гость 2013/04/19
Решение отписал выше в ответе на предыдущее сообщение, проблема в кодировке .info
Админ 2012/05/09
Возможно в info файле темы есть ошибки.Чтото с блоками и меню. Так сразу не скажешь..
Админ 2012/05/08
А что за ошибки? Можно скрин?
Гость 2012/05/08
Здравствуйте!
Прочитал Вашу статью, ещё предварительно посмотрел видеоуроки по созданию собственной темы, после чего попытался создать свою на Базе Zen.
Не могу понять, толи я чтото не так делаю, толи не хватает чего-то. Тема то вывелась и показывает, но вместе с ней появляются куча ошибок (((
Помогите пожалуста разобратся в чём дело.