function views_block_info
Implements hook_block_info().
File
-
./
views.module, line 688
Code
function views_block_info() {
// Try to avoid instantiating all the views just to get the blocks info.
views_include('cache');
$cache = views_cache_get('views_block_items', TRUE);
if ($cache && is_array($cache->data)) {
return $cache->data;
}
$items = array();
$views = views_get_all_views();
foreach ($views as $view) {
// Disabled views get nothing.
if (!empty($view->disabled)) {
continue;
}
$view->init_display();
foreach ($view->display as $display) {
if (isset($display->handler) && !empty($display->handler->definition['uses hook block'])) {
$result = $display->handler
->execute_hook_block_list();
if (is_array($result)) {
$items = array_merge($items, $result);
}
}
if (isset($display->handler) && $display->handler
->get_option('exposed_block')) {
$result = $display->handler
->get_special_blocks();
if (is_array($result)) {
$items = array_merge($items, $result);
}
}
}
}
// block.module has a delta length limit of 32, but our deltas can
// unfortunately be longer because view names can be 32 and display IDs
// can also be 32. So for very long deltas, change to md5 hashes.
$hashes = array();
// Get the keys because we're modifying the array and we don't want to
// confuse PHP too much.
$keys = array_keys($items);
foreach ($keys as $delta) {
if (strlen($delta) >= 32) {
$hash = md5($delta);
$hashes[$hash] = $delta;
$items[$hash] = $items[$delta];
unset($items[$delta]);
}
}
// Only save hashes if they have changed.
$old_hashes = variable_get('views_block_hashes', array());
if ($hashes != $old_hashes) {
variable_set('views_block_hashes', $hashes);
}
// Save memory: Destroy those views.
foreach ($views as $view) {
$view->destroy();
}
views_cache_set('views_block_items', $items, TRUE);
return $items;
}