[РЕШЕНО]Нестандартный вьювс

Главные вкладки

Аватар пользователя aa2ndrew@drupal.org aa2ndrew@drupal.org 23 июня 2009 в 16:43

Здравствуйте. У меня вопрос следующего плана. Мне надо сделать два вьювса, в первом вывести три последних ноды, отсортированные по дате то есть 1,2,3; во втором вывести три следующие ноды, то есть 4,5,6. Можно ли вообще такое сделать с помощью вьювса? МОжет для этого есть какието модули.
Заранее спасибо.

Комментарии

Аватар пользователя aa2ndrew@drupal.org aa2ndrew@drupal.org 23 июня 2009 в 22:01

Это для шестого друпала... А для пятого есть решения? Подозреваю, что надо как то извращаться с аргументами... Натолкните на мысль)

Аватар пользователя sas@drupal.org sas@drupal.org 23 июня 2009 в 23:26

"<a href="mailto:aa2ndrew@drupal.org">aa2ndrew@drupal.org</a>" wrote:
какието модули

создаем материал "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;    
?>

Вот и все ...

Аватар пользователя aa2ndrew@drupal.org aa2ndrew@drupal.org 24 июня 2009 в 0:24

Оно но не совсем. На сайте используется модуль 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)) 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)) 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 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.

Каким образом можно задать всех юзеров, которые могут просматривать ноды, в том числе и не зареганых?

Аватар пользователя sas@drupal.org sas@drupal.org 24 июня 2009 в 9:01

Смотрим сюда

<?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;    
?>