Здравствуйте. У меня вопрос следующего плана. Мне надо сделать два вьювса, в первом вывести три последних ноды, отсортированные по дате то есть 1,2,3; во втором вывести три следующие ноды, то есть 4,5,6. Можно ли вообще такое сделать с помощью вьювса? МОжет для этого есть какието модули.
Заранее спасибо.
Комментарии
для второго задать offset 3
Basic settings > Items to display > Offset
Это для шестого друпала... А для пятого есть решения? Подозреваю, что надо как то извращаться с аргументами... Натолкните на мысль)
создаем материал "page", фильтр для текстового поля - "PHP code"
пишем туда
<?php
$result = db_query_range(db_rewrite_sql("select n.nid from {node} n where n.status = 1"),0,3);
while($node = db_fetch_object($result)) $out .= node_view(node_load($node->nid),TRUE);
print $out;
?>
Вторая страница
<?php
$result = db_query_range(db_rewrite_sql("select n.nid from {node} n where n.status = 1"),3,3);
while($node = db_fetch_object($result)) $out .= node_view(node_load($node->nid),TRUE);
print $out;
?>
Вот и все ...
Спасибо, именно оно.
Оно но не совсем. На сайте используется модуль Modr8, и для любого юзера неадмина выводится ворнинг
USER warning: You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near 'WHERE ((n.moderate != 1 OR n.uid = 4)) ORDER BY n.changed DESC LIMIT 0, 3' at line 1 query: SELECT n.nid FROM node n WHERE n.status = 1 AND n.type = 'news' WHERE ((n.moderate != 1 OR n.uid = 4)) ORDER BY n.changed DESC LIMIT 0, 3 IN .../includes/DATABASE.mysql.inc ON line 174.
USER warning: You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near 'WHERE ((n.moderate != 1 OR n.uid = 4)) ORDER BY n.changed DESC LIMIT 3, 6' at line 1 query: SELECT n.nid FROM node n WHERE n.status = 1 AND n.type = 'news' WHERE ((n.moderate != 1 OR n.uid = 4)) ORDER BY n.changed DESC LIMIT 3, 6 IN .../includes/DATABASE.mysql.inc ON line 174.
Каким образом можно задать всех юзеров, которые могут просматривать ноды, в том числе и не зареганых?
Смотрим сюда
<?phpfunction modr8_db_rewrite_sql($query, $primary_table, $primary_field, $args) {
switch ($primary_field) {
case 'nid':
// this query deals with node objects
$access = (user_access('administer nodes') || user_access('moderate content'));
if (!$access) {
global $user;
$return = array();
if ($primary_table != 'n') {
$return['join'] = "LEFT JOIN {node} n ON $primary_table.nid = n.nid";
}
if ($user->uid == 0) {
$return['where'] = "(n.moderate != 1)";
}
else {
$return['where'] = "(n.moderate != 1 OR n.uid = ". (int)$user->uid .")";
}
return $return;
}
break;
}
} ?>
Здесь ничего не написано по поводу админ пользователь или не админ, причина у Вас на сайте в чем то другом, где то некорректно сделан hook_rewrite(), к сожалению не могу видеть Ваше сборки, но лекарство для Вас ниже
P.S. Обратите внимание во второй странице не 3,6 а 3,3 !
<?php
global $user;
if ($user->uid == 0) $result = db_query_range("select n.nid from {node} n where n.status = 1 AND n.moderate != 1",0,3);
else $result = db_query_range("select n.nid from {node} n where n.status = 1 AND (n.moderate != 1 OR n.uid = %d)",$user->uid,0,3);
while($node = db_fetch_object($result)) $out .= node_view(node_load($node->nid),TRUE);
print $out;
?>
Вторая страница
<?php
global $user;
if ($user->uid == 0) $result = db_query_range("select n.nid from {node} n where n.status = 1 AND n.moderate != 1",3,3);
else $result = db_query_range("select n.nid from {node} n where n.status = 1 AND (n.moderate != 1 OR n.uid = %d)",$user->uid,3,3);
while($node = db_fetch_object($result)) $out .= node_view(node_load($node->nid),TRUE);
print $out;
?>
Да, работает как часы. Спасибо.