2016-10-17 3 views

ответ

1

См. Код ниже. Очки, чтобы иметь в виду, являются для лучшего использования:

  1. Блок уже должен существовать и быть отнесены к области, например, «before_content»
  2. После каждого отключения/включения очистили кеш «Drush куб.см все»
  3. On повторно включить блок запоминает его положение
  4. Ваш блок дельта может быть числом или только буквенно-цифровой

Отключить блок:

db_update('block') 
      ->fields(array(
      'status' => 0, 
      'region' => 'disabled',    
      ) 
     ) 
      ->condition('delta', 'client-block-number_here') 
      ->execute(); 

Включить блок:

db_update('block') 
      ->fields(array(
      'status' => 1, 
      'region' => 'before_content',    
      ) 
     ) 
      ->condition('delta', 'client-block-number_here') 
      ->execute(); 
0

Настоящая причина, почему вы хотите, чтобы отключить блок? Если вы хотите показать блок в зависимости от пользователей, сделать атаку db не является хорошим решением.

Я думаю, вы можете сделать это с помощью области и системы предварительной обработки. Регион может показывать любые вещи, блоки, текст или ничего.

Пример:

function HOOK_preprocess_node(&$variables, $hook){ 
    //check the current user code... 
    //.. 
    if (_condition_is_ok){ 
     $block = module_invoke('module', 'block_view', 'block_name'); 
     $variables["my_block"] = $block["content"]; 
    } 
} 

Если вы что не забудьте проверить переменная установлена ​​в вашем TPL :)

Я не думаю, что лучший способ сделать это, но это лучше, чем использовать db_update, db_update пишите прямо в свой дБ, а также передайте двигатель drupal.

+0

Мое особое требование было основано на задании CRON, которое работает на сервере (по расписанию). Работала отлично. –

Смежные вопросы