Нестандартная главная страница

Аватар пользователя rezus rezus 13 февраля 2005 в 16:38

Господа.
Много ходил по форумам и пытался найти ответ на свой вопрос. Но чёткой последовательности действий я для себя так и не вынес. Мне нужно сделать главную страницу не совсем стандартной. Схему размещения даннных см. на картинке.

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

В качестве практической реализации подобной схемы можно привести пример www.basketball.ru

ВложениеРазмер
Иконка изображения Graphic1.jpg22.87 КБ
0 Thanks

Комментарии

Аватар пользователя axel axel 13 февраля 2005 в 17:00

Я думаю это надо в теме править. Отлавлиать вывод титульной страницы (см. как это в xtemplate сделано например) и для неё под стандартным выводом (можно использовать модуль node, как по умолчанию сделано - это верхняя часть страницы будет) выводить свой список статей. Блоки по бокам, шапка - тож всё стандартное. Разумеется для формирования списка статей понадобятся свои запросы - либо модулем простеньким либо в крайнем случае прямо в коде темы это забить.

Ещё есть front_page модуль, который позволяет почти тоже самое без правки темы, но там по-моему только HTML можно задействовать, для того чтобы он PHP воспринял придётся его доработать.

--
Axel,
www.axel.drupal.ru

Аватар пользователя rezus rezus 13 февраля 2005 в 18:51

Насколько я понимаю node выводит не список ссылок на новости, а заголовки новостей + начальный текст новости + служебные ссылки (комментарии и пр.). Также node не делит новости по датам (на картинке новости дня выделены маленькими подзаголовочками типа "31.12.2004").
Можно-ли без программирования подстроить node так, чтобы выводились только заголовки (и ничего более) и автоматом расставлялись подзаголовочки с датами?

Аватар пользователя axel axel 13 февраля 2005 в 21:08

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

--
Axel,
www.axel.drupal.ru

Аватар пользователя rezus rezus 13 февраля 2005 в 22:28

Буду пробовать, спасибо. :)
Если что, могу ли я рассчитывать на помощь и консультации? ;)

Аватар пользователя rezus rezus 17 февраля 2005 в 23:11

Итак, я поставил этот FrontPage с поддержкой PHP. И вставил на главную страницу следующий код:

<?php

function title_list($result, $title = NULL) {
  $dt = "";
  $cond = 0;
  $out = "";
  while ($node = db_fetch_object($result)) {
    $a = getdate($node->created);
    if ($cond == 0)
    {
      $y = $a['year'];
      $m = $a['mon'];
      $d = $a['mday'];
      $dt = "<p><b>".$d.".".$m.".".$y."</b></p>";
      $out = $out.$dt;
      $cond = 1;
    }
    else
      if (($y != $a['year']) || ($m != $a['mon']) || ($d != $a['mday']))
      {
        $out = $out.theme('node_list', $items, $title);
        UnSet($items);
        $a = getdate($node->created);
        $y = $a['year'];
        $m = $a['mon'];
        $d = $a['mday'];
        $dt = "<p><b>".$d.".".$m.".".$y."</b></p>";
        $out = $out.$dt;
      }
      else
        $dt = "";
    $number = module_invoke('comment', 'num_all', $node->nid);
    $items[] = l($node->title, 'node/'. $node->nid, $number ? array('title' => format_plural($number, '1 comment', '%count comments')) : '');
  }

  return $out.theme('node_list', $items, $title);
}

global $user;
if (user_access("access content"))
{
  $stories = "";
  $queryResult = db_query_range("SELECT n.uid, u.name, max(n.nid) FROM {node} n INNER JOIN {users} u ON u.uid = n.uid WHERE n.type = 'story' AND n.status = 1 GROUP BY n.uid, u.name ORDER BY 3 DESC", 0, 10);
  while ($node = db_fetch_object($queryResult))
  {
    $stories .= title_list(db_query_range("SELECT n.title, n.nid, n.created FROM {node} n WHERE n.type = 'story' AND n.status = 1 AND n.uid = " . $node->uid . " ORDER BY n.nid DESC", 0, 10));
  }
  print $stories
. "
"
. l(t("more"), "story", array("title" => t("Просмотреть остальные новости."))) ."
"
;
}
?>

Всё работает отлично, выводятся списки новостей с расстановкой дат. Однако данные берутся абсолютно из всех словарей базы. Как подправить SQL-запрос, чтобы информация доставалась только из словаря, скажем, с названием "Статьи"?

Аватар пользователя kiev1 kiev1 18 февраля 2005 в 12:19

я так понял вы хотите сделать группы блоков (по центру) - этого всем нехватает в друпале но почему-то все меня игнорируют - я где-то писал, но забыл в каком топике - используйте мой хак к модулю block и доделайте его по возможности что-б он с разными движками тем работал:
http://kiev1.org/download/block_module.zip
http://drupal.org/node/15854
Дело в том что в друпале отличительная особенность то что код простой и если его усложнять то это неправильно - мой хак не усложняет а наоборот упрощает код модуля block. Он позволяет в теме задавать произвольные зоны блоков которые могут быть размещены где угодно в теме - модуль block сам парсит файл темы находит выражения вида
$yyy=theme ("blocks", " anywhere 1 ");
$zzz=theme ("blocks", " for example here ");
$nnn=theme ("blocks", " and here it it is possible ");
и выдает их произвольные названия в виде выпадающего меню в административном интерфейсе вместо рабиобутона слева/справа а дизайнер в теме может позиционировать группу блоков где угодно выводя эти переменные а там где в настройках блоков "путь" - там прописывать правила появления этих блоков на главной и других страницах сайта стандартным способом. Это необходимо для создания практически любых сайтов и даже более - как в постнуке многие пришли к необходимости в настройках не ставить на главной странице какой-то модуль а модуль "пустой" - так и тут главная страничка должна состоять из одних блоков.

Аватар пользователя rezus rezus 18 февраля 2005 в 12:35

Эту тему я читал здесть на форуме раньше. Пришёл к вводу, что данный, несомненно полезный хак мне не совсем подойдёт.
Я так понимаю, речь идёт о PHPTemplate. Можно ли проделать данный трюк в XTemplate? И второй момент, который вызывает вопросы. Я хотел бы, чтобы изменения касались только главной страницы. Весь же сайт должен работать как обычный, немодифицированный Друпал.

Аватар пользователя B.X B.X 19 февраля 2005 в 0:02

PHPTemplate лучше и быстрее, а в теме box_grey поддерживаются все возможности XTemplate, в том числе и аватары...

Аватар пользователя B.X B.X 19 февраля 2005 в 0:04

дубль... хорошо бы хак был такой, чтобы, если один пользователь постит второй раз (за какое-то время) в одну и ту же тему, то это добавляется к его прежнему сообщению как "Добавлено:"...

Аватар пользователя Гость Гость (не проверено) 19 августа 2005 в 19:23

ребят не в тему будет замечено, но вот после сообщения добавленного Пят, 18/02/2005 - 09:19 форматирование текста у всех последующих постов пошло, такое, которое затеял автор.

есть решение этой проблемы?

Аватар пользователя Гость Гость (не проверено) 19 августа 2005 в 19:26

на друпале.орг есть модуль, называется он front, он позволяет делать нестандартные страницы...
а на www.basketball.ru я не понял в чем нестандартность первой страницы..