• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

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

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Блок На Drupal 6.22

  • Автор темы dojerok
  • Дата начала
D

dojerok

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

sinkopa

Доброго времени суток, уважаемые господа. Я делаю сайт на 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 работает только для блоков, которые есть один из элеметов страницы... А там еще есть шапка, подвал, сама страница с регионами (верх/центр/низ), фрейм ноды, верхнее, нижнее и боковое меню... :)
 
D

dojerok

А результат будет именно модулем? Который можно будет включать/отключать администратору в панели администрирования?
 
S

sinkopa

А результат будет именно модулем? Который можно будет включать/отключать администратору в панели администрирования?
Мда... не учел что Вам именно модуль в дипломе нужен... Все вышесказанное мной к темам относится...
А модуль... Вот он Ваш "дипломный модуль"... :)
 
D

dojerok

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

sinkopa

В общем, кое-как написал, мобильная либо полная версия загружается автоматически. Теперь возникла проблема, как правильно сделать, что бы пользователь мог сам выбирать версию сайта. Например, если пользователь на полной версии, то внизу отображается надпись "Мобильная версия", если на мобильной - то наоборот. Ну и соответственно при нажатии на данную ссылку загружается соответствующая тема.
Через сессию.
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 {
//	- выдаем по решению алгоритма Вашей функции
}
Где то так. :)
Примеров работы с сессиями в инете полно. Вот например :
Можно еще аналогичным способом использовать cookies. Но бывает что некоторые пользователи куки в браузере запрещают.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!