Блок На Drupal 6.22

dojerok

New member
01.05.2009
4
0
#1
Доброго времени суток, уважаемые господа. Я делаю сайт на Drupal 6.22 для дипломной работы. Моя задача состоит в том, что бы написать модуль, который будет определять устройство и подгружать автоматически нужную версию сайта (мобильную или полную). Сама функция есть, осталось вывести это в нужный блок на сайте. Я с этим никогда не сталкивался, и, скажем так, программирование мне дается не легко. Я нашел в интернете информацию, что нужно использовать хуки, пытался разобраться - но неудачно. Понял одно, что нужно использовать "hook_block", но как именно использовать - я не догадался. Руководителю дипломного проекта написал - он сообщение прочел, но тупо проигнорировал. Подскажите, пожалуйста, желательно пошагово, а еще лучше "на пальцах", что и как нужно сделать. А если не затруднит - набросайте хотя бы каркас функции блока и объясните подробно, как его наполнить. Заранее благодарен всем, кто откликнется.
P.S. Исходник самой функции, определяющей версию сайта могу так же сбросить.
 

sinkopa

Well-known member
17.06.2009
344
4
#2
Доброго времени суток, уважаемые господа. Я делаю сайт на Drupal 6.22 для дипломной работы. Моя задача состоит в том, что бы написать модуль, который будет определять устройство и подгружать автоматически нужную версию сайта (мобильную или полную). Сама функция есть, осталось вывести это в нужный блок на сайте. Я с этим никогда не сталкивался, и, скажем так, программирование мне дается не легко. Я нашел в интернете информацию, что нужно использовать хуки, пытался разобраться - но неудачно. Понял одно, что нужно использовать "hook_block", но как именно использовать - я не догадался. Руководителю дипломного проекта написал - он сообщение прочел, но тупо проигнорировал. Подскажите, пожалуйста, желательно пошагово, а еще лучше "на пальцах", что и как нужно сделать. А если не затруднит - набросайте хотя бы каркас функции блока и объясните подробно, как его наполнить. Заранее благодарен всем, кто откликнется.
P.S. Исходник самой функции, определяющей версию сайта могу так же сбросить.
В Drupal-е отображением контента рулят темы (themes).
Темы в Drupal-е устанавливаются в каталог: <корень сайта>/sites/all/themes/<имя темы>
Хуки относящиеся к конкретной теме пишутся в файл: /<имя темы>/template.php
Прямые "метаморфозы" отображения можно осуществять php кодом вставляемым в файлы:
/<имя темы>/templates/block.tpl.php
/<имя темы>/templates/comment.tpl.php
/<имя темы>/templates/maintenance-page.tpl.php
/<имя темы>/templates/node.tpl.php
/<имя темы>/templates/page.tpl.php
Совет такой:
Идите на drupal.org в раздел тем. Подберите "метаморфную" тему, которая (как в Вашем дипломе :) ) определяет по типу устройства нужную версию сайта.
Ну и подглядите как и что именно она делает... В каких файлах смотреть, я написал выше. Там и посмотрите, в каком месте можно использовать вашу функцию вместо друпаловской. :)

Другой вариант:
Подберите две темы. для мобильной версии и полной. "Сшейте" их в одну, объеденяя код в tpl-ках через if(<ваша функция>){<мобильная версия>} else {<полная версия>}
Так же, в template.php, через if, поставите подгрузку стилей от мобильной либо полной темы.

Третий вариант:
Скачайте с drupal.org базовый шаблон для создания собственной темы (на странице с уроком по созданию тем). Создайте собственную тему используя при разбивке регионов свою функцию... Конечно не так красиво скорее всего получится как у профессиональных дизайнеров... но все таки... :)

А hook_block работает только для блоков, которые есть один из элеметов страницы... А там еще есть шапка, подвал, сама страница с регионами (верх/центр/низ), фрейм ноды, верхнее, нижнее и боковое меню... :)
 

dojerok

New member
01.05.2009
4
0
#3
А результат будет именно модулем? Который можно будет включать/отключать администратору в панели администрирования?
 

sinkopa

Well-known member
17.06.2009
344
4
#4
А результат будет именно модулем? Который можно будет включать/отключать администратору в панели администрирования?
Мда... не учел что Вам именно модуль в дипломе нужен... Все вышесказанное мной к темам относится...
А модуль... Вот он Ваш "дипломный модуль"... :)
http://drupal.org/project/mobile_switch
 

dojerok

New member
01.05.2009
4
0
#5
В общем, кое-как написал, мобильная либо полная версия загружается автоматически. Теперь возникла проблема, как правильно сделать, что бы пользователь мог сам выбирать версию сайта. Например, если пользователь на полной версии, то внизу отображается надпись "Мобильная версия", если на мобильной - то наоборот. Ну и соответственно при нажатии на данную ссылку загружается соответствующая тема.
 

sinkopa

Well-known member
17.06.2009
344
4
#6
В общем, кое-как написал, мобильная либо полная версия загружается автоматически. Теперь возникла проблема, как правильно сделать, что бы пользователь мог сам выбирать версию сайта. Например, если пользователь на полной версии, то внизу отображается надпись "Мобильная версия", если на мобильной - то наоборот. Ну и соответственно при нажатии на данную ссылку загружается соответствующая тема.
Через сессию.
1) Создаете штатным друпаловским способом блок с HTML формой отправляемой методом POST. Достаточно одного поля типа Submit (Кнопка отправки формы).
чтото типа
Код:
<form action="#" method="post" id="myform" name="myform">
<input type="submit" id="changemode" name="changemode" value="Сменить версию"> 
</form>
2) В коде, который который у Вас принимает решение какую версию сайта выдавать, проверяете нажимал ли пользователь эту кнопку:
Код:
 if ( isset($_POST['changemode']) ) {
// пользователь нажал кнопку. переключаем режим или устанавливаем сессию
if ( isset($_SESSION['sitemode']) ) {
//... если сессия уже установлена - переключаем с "mobyle" на "full" (или наоборот)
} else {
//... устанавливаем
session_start(); 
$_SESSION['sitemode'] = "mobyle"; // или "full"

}
} 
// проверяем, была ли установлена сессия

if ( isset($_SESSION['sitemode']) ) {
//	- выдаем в режиме заданном сесссией
if ($_SESSION['sitemode'] == "full") {//...} else {//...}
} else {
//	- выдаем по решению алгоритма Вашей функции
}
Где то так. :)
Примеров работы с сессиями в инете полно. Вот например : http://www.softtime.ru/bookphp/gl8_1.php
Можно еще аналогичным способом использовать cookies. Но бывает что некоторые пользователи куки в браузере запрещают.