Skip to Content
 Русский Русский    English English   

 

Drupal. Как я реализовала pager в модуле FAQ (Frequently Asked Questions)

Drupal. Как я реализовала pager в модуле FAQ (Frequently Asked Questions)

Для реализации листалки страниц в модуле FAQ 6.x-1.12 (Frequently Asked Questions) я изменила функцию запроса к базе данных db_query на pager_query, которая выполняет "постраничное" обращение к базе данных, и вывела пейджер с помощью theme('pager').

Faq.module,v 1.1.4.52.2.145 2010/10/29 :
[geshifilter-php] function faq_theme() { 'faq_questions_inline' => array( 'path' => $path, 'file' => 'faq.questions_inline.inc', 'template' => 'faq-questions-inline', - 'arguments' => array('data' => NULL), + 'arguments' => array('data' => NULL, 'pager' => NULL), ), } function faq_page($tid = 0, $faq_display = '', $category_display = '') { if ($default_sorting != 'DESC') { - $result = db_query(db_rewrite_sql("SELECT n.nid, if((w.weight IS NULL), %d, w.weight) as weight, n.sticky, n.created FROM {node} n LEFT JOIN {faq_weights} w ON w.nid = n.nid WHERE n.type='faq' AND n.status = 1 AND (w.tid = 0 OR w.tid IS NULL) ORDER BY weight, n.sticky DESC, n.created ASC", "n", "nid"), $default_weight); + $cnt = 'SELECT COUNT(*) FROM {node} n WHERE n.status=1 AND n.type="faq"'; + $result = pager_query(db_rewrite_sql("SELECT n.nid, if((w.weight IS NULL), %d, w.weight) as weight, n.sticky, n.created FROM {node} n LEFT JOIN {faq_weights} w ON w.nid = n.nid WHERE n.type='faq' AND n.status = 1 AND (w.tid = 0 OR w.tid IS NULL) ORDER BY weight, n.sticky DESC, n.created ASC", "n", "nid"), 10, 0, $cnt, $default_weight); } else { - $result = db_query(db_rewrite_sql("SELECT n.nid, if((w.weight IS NULL), %d, w.weight) as weight, n.sticky, n.created FROM {node} n LEFT JOIN {faq_weights} w ON w.nid = n.nid WHERE n.type='faq' AND n.status = 1 AND (w.tid = 0 OR w.tid IS NULL) ORDER BY weight, n.sticky DESC, n.created DESC", "n", "nid"), $default_weight); + $cnt = 'SELECT COUNT(*) FROM {node} n WHERE n.status=1 AND n.type="faq"'; + $result = pager_query(db_rewrite_sql("SELECT n.nid, if((w.weight IS NULL), %d, w.weight) as weight, n.sticky, n.created FROM {node} n LEFT JOIN {faq_weights} w ON w.nid = n.nid WHERE n.type='faq' AND n.status = 1 AND (w.tid = 0 OR w.tid IS NULL) ORDER BY weight, n.sticky DESC, n.created DESC", "n", "nid"), 10, 0, $cnt, $default_weight); } //Стандартный пейджер друпала вызываю с идентификатором листалки 0 и количеством элементов на странице 10. //Если листалок на странице несколько, то необходимо поменять идентификатор, но в таком случае ссылки примут вид "page=0,0,0,0...", где количество 0 равно номеру идентификатора + $pager = theme('pager', NULL, 10, 0); //Передаю пейджер в файл шаблона, который использую (макет страницы "Questions inline") case 'questions_inline': include_once($faq_path .'/faq.questions_inline.inc'); - $output = theme('faq_questions_inline', $data); + $output = theme('faq_questions_inline', $data, $pager); break; [/geshifilter-php]

faq-questions-inline.tpl.php,v 1.1.2.5:
[geshifilter-code] //Вывод пейджера <?php print $pager; ?> [/geshifilter-code]

Аналогична реализация пейджера для списка вопросов при выборе категории.
Faq.module,v 1.1.4.52.2.145 2010/10/29 :
[geshifilter-php] function _display_faq_by_category($faq_display, $category_display, $term, $display_header, &$output, &$output_answers) { if ($default_sorting != 'DESC') { - $result = db_query(db_rewrite_sql("SELECT n.nid, if((w.weight IS NULL), %d, w.weight) as weight, n.sticky, n.created FROM {node} n INNER JOIN {term_node} tn ON (n.nid = tn.nid AND n.vid = tn.vid) LEFT JOIN {faq_weights} w ON w.tid = tn.tid AND n.nid = w.nid WHERE n.type='faq' AND n.status = 1 AND tn.tid = '%d' ORDER BY weight, n.sticky DESC, n.created ASC", "n", "nid"), $default_weight, $term->tid); + $cnt = "SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} tn ON (n.nid = tn.nid AND n.vid = tn.vid) LEFT JOIN {faq_weights} w ON (w.tid = tn.tid AND n.nid = w.nid) WHERE n.type='faq' AND n.status = 1 AND tn.tid = '$term->tid'"; + $result = pager_query(db_rewrite_sql("SELECT n.nid, if((w.weight IS NULL), %d, w.weight) as weight, n.sticky, n.created FROM {node} n INNER JOIN {term_node} tn ON (n.nid = tn.nid AND n.vid = tn.vid) LEFT JOIN {faq_weights} w ON w.tid = tn.tid AND n.nid = w.nid WHERE n.type='faq' AND n.status = 1 AND tn.tid = '%d' ORDER BY weight, n.sticky DESC, n.created ASC", "n", "nid"), 10, 0, $cnt, $default_weight, $term->tid); } else { - $result = db_query(db_rewrite_sql("SELECT n.nid, if((w.weight IS NULL), %d, w.weight) as weight, n.sticky, n.created FROM {node} n INNER JOIN {term_node} tn ON (n.nid = tn.nid AND n.vid = tn.vid) LEFT JOIN {faq_weights} w ON w.tid = tn.tid AND n.nid = w.nid WHERE n.type='faq' AND n.status = 1 AND tn.tid = '%d' ORDER BY weight, n.sticky DESC, n.created DESC", "n", "nid"), $default_weight, $term->tid); + $cnt = "SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} tn ON (n.nid = tn.nid AND n.vid = tn.vid) LEFT JOIN {faq_weights} w ON (w.tid = tn.tid AND n.nid = w.nid) WHERE n.type='faq' AND n.status = 1 AND tn.tid = '$term->tid'"; + $result = pager_query(db_rewrite_sql("SELECT n.nid, if((w.weight IS NULL), %d, w.weight) as weight, n.sticky, n.created FROM {node} n INNER JOIN {term_node} tn ON (n.nid = tn.nid AND n.vid = tn.vid) LEFT JOIN {faq_weights} w ON w.tid = tn.tid AND n.nid = w.nid WHERE n.type='faq' AND n.status = 1 AND tn.tid = '%d' ORDER BY weight, n.sticky DESC, n.created DESC", "n", "nid"), 10, 0, $cnt, $default_weight, $term->tid); } + $pager = theme('pager', NULL, 10, 0); case 'questions_inline': include_once($faq_path .'/faq.questions_inline.inc'); - $output .= theme('faq_category_questions_inline', $data, $display_header, $category_display, $term, $faq_class, $term); + $output .= theme('faq_category_questions_inline', $data, $display_header, $category_display, $term, $faq_class, $term).$pager; break; [/geshifilter-php]

Ваша оценка: Нет Средняя: 4.7 (19 голосов)

Нажимая кнопку «Сохранить», я подтверждаю свою дееспособность, согласие на получение информации от NetK, согласие на обработку персональных данных в соответствии с Политикой конфиденциальности и Пользовательским соглашением.