답변:
사용하려는 뷰 후크 hook_views_pre_build
는 쿼리가 작성되기 전에 호출됩니다. 이제 이것은 기본적인 모듈 개발 경험이 있고 뷰 API에 익숙하다고 가정합니다.
당신은 할 수 있어야합니다 :
/*
* Implementation of hook_views_pre_build().
*/
function hook_views_pre_build(&$view) {
// Make sure this is only for the specific view you want to modified
if ($view->name == "foo_bar") {
// Get the x-y value from where you're storing it (in your example the node object).
$pager_count = get_count_for_this_node();
// Lets also make sure that this is a number so we won't destroy our view.
if (is_numeric($pager_count)) {
// Now lets set the pager item to what ever out count is.
$view->pager['items_per_page'] = $pager_count;
}
}
}
위에서 우리는 호출기 및 다른 모든 것이 변경 사항을 반영하는 방식으로 뷰 쿼리가 작성되기 전에 호출되는 뷰 후크를 사용하고 있습니다.
주의 사항 : 뷰 후크는 진행 상황을 이해하는 경우에만 사용해야합니다. 위 코드는 views-2.x 용으로 작성되었습니다.
도움이 되었기를 바랍니다.
$view->items_per_page = $pager_count;
Drupal 7의 경우 다음을 작성해야합니다.
$view->items_per_page = $pager_count;
예제에서 :
/**
* Implements hook_views_pre_build().
*/
function module_name_views_pre_build(&$view) {
if ($view->name == "foo_bar" && $view->current_display == 'foo_display') {
$pager_count = get_count_for_this_node();
if (is_numeric($pager_count)) {
$view->items_per_page = $pager_count;
}
}
}
@ericduran의 코드 예제를 사용합니다.
뷰 전처리 기능을 사용해야합니다
/*
* Implementation of hook_views_pre_render().
*/
function MYMODULE_views_pre_render(&$view){
// $view->name
// $view->current_display
// ...
// look for other variables in $view object
}
hook_views_pre_render에서 뷰 결과 및 호출기를 업데이트하려면 다음을 수행하십시오.
<?php
/**
* Implementation of hook_views_pre_render().
*/
function MODULENAME_views_pre_render(&$view) {
if ($view->name == 'my_view' && $view->current_display == 'my_display') {
// View result update logic.
// e.g.
// $result = array();
// foreach ($view->result as $k => $row) {
// if (whatever is your condition) {
// $result[$k] = $row;
// }
// }
// Assuming $result has data as per your logic.
// Update the pager according to result.
$view->query->pager->total_items = count($result);
$view->query->pager->update_page_info();
// Add results to view.
$view->result = $result;
}
}
이 작동합니다! ;)