Блок На Drupal 6.22

Тема в разделе "PHP программирование", создана пользователем dojerok, 21 апр 2013.

  1. dojerok

    dojerok New Member

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

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    В 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 работает только для блоков, которые есть один из элеметов страницы... А там еще есть шапка, подвал, сама страница с регионами (верх/центр/низ), фрейм ноды, верхнее, нижнее и боковое меню... :)
     
  3. dojerok

    dojerok New Member

    Регистрация:
    1 май 2009
    Сообщения:
    4
    Симпатии:
    0
    А результат будет именно модулем? Который можно будет включать/отключать администратору в панели администрирования?
     
  4. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Мда... не учел что Вам именно модуль в дипломе нужен... Все вышесказанное мной к темам относится...
    А модуль... Вот он Ваш "дипломный модуль"... :)
    http://drupal.org/project/mobile_switch
     
  5. dojerok

    dojerok New Member

    Регистрация:
    1 май 2009
    Сообщения:
    4
    Симпатии:
    0
    В общем, кое-как написал, мобильная либо полная версия загружается автоматически. Теперь возникла проблема, как правильно сделать, что бы пользователь мог сам выбирать версию сайта. Например, если пользователь на полной версии, то внизу отображается надпись "Мобильная версия", если на мобильной - то наоборот. Ну и соответственно при нажатии на данную ссылку загружается соответствующая тема.
     
  6. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Через сессию.
    1) Создаете штатным друпаловским способом блок с HTML формой отправляемой методом POST. Достаточно одного поля типа Submit (Кнопка отправки формы).
    чтото типа
    Код (Text):
    <form action="#" method="post" id="myform" name="myform">
    <input type="submit" id="changemode" name="changemode" value="Сменить версию">
    </form>
    2) В коде, который который у Вас принимает решение какую версию сайта выдавать, проверяете нажимал ли пользователь эту кнопку:
    Код (Text):
     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. Но бывает что некоторые пользователи куки в браузере запрещают.
     
Загрузка...

Поделиться этой страницей