Как программно активировать и задать условия для блока в Drupal 7?

#drupal #drupal-7 #drupal-blocks

#drupal #drupal-7 #drupal-блоки

Вопрос:

У меня есть блок, и я хочу активировать его в некотором регионе, а также установить для него условие, чтобы его видели только в заданном узле. Как я могу сделать это программно в Drupal 7?

Ответ №1:

drupal_write_record не работает, если вы хотите использовать внутри перехвата обновления. вы также можете использовать db_update или db_insert, в зависимости, конечно, от того, обновляете ли вы или создаете запись в базе данных. Вот пример обновления:

 <?php
// find your block id, for me $bid = 38
db_update('block')
  ->fields(array(
    'module' => 'system',
    'delta' => 'main-menu', // block delta, find in database or module that defines it
    'theme' => 'mytheme', // theme to configure
    'visibility' => BLOCK_VISIBILITY_NOTLISTED, // see drupal constants
    'region' => 'main_menu', // region declared in  theme
    'status' => 1,
    'pages' => '',
    )
  )
  ->condition('bid', $bid, '=')
  ->execute();
?>
  

Смотрите API hook_block_info для получения более подробной информации о параметрах.

Ответ №2:

Я смог добиться этого, используя следующий код.

 $menu_block = array(
    'module' => 'menu',
    'delta' => 'IDBLOCK', // the id of the block
    'theme' => 'MYTHEME', // the current theme
    'visibility' => 1, // it is displayed only on those pages listed in $block->pages.
    'region' => 'menu',
    'status' => 1,
    'pages' => '', // display the menu only for these pages
    );

drupal_write_record('block', $menu_block);