Легкий способ создания блоков программно? [закрыто]

Обучение Drupal. Теперь я знаю, что могу создать блок через бэкэнд, но я бы предпочел бы их программировать, если это возможно. На самом деле я уверен, что это возможно. Но какой самый простой способ?

25 голосов | спросил jayarjo 21 J0000006Europe/Moscow 2011, 21:27:52

5 ответов


33

Для Drupal 7:

Используйте hook_block_info и hook_block_view перехватывает ваш настраиваемый модуль . hook_block_info определяет блок. Он появится в admin > Структура > блоки . * hook_block_view * отображает содержимое. См. Примеры из API Drupal.

Пример hook_block_info, где определены два блока (под названием Syndicate и Recent content):

  & lt;? php
function hook_block_info () {
  //Этот пример исходит от node.module.
  $ blocks ['syndicate'] = массив (
    'info' => т ( 'Синдикат'),
    'cache' => DRUPAL_NO_CACHE,
  );

  $ blocks ['recent'] = массив (
    'info' => t («Недавний контент»),
    //DRUPAL_CACHE_PER_ROLE предполагается.
  );

  return $ blocks;
}
? & GT;
 

Пример hook_block_view:

  & л;? PHP
function hook_block_view ($ delta = '') {
  //Этот пример адаптирован из node.module.
  $ block = array ();

  switch ($ delta) {
    case 'syndicate':
      $ block ['subject'] = t ('Syndicate');
      $ block ['content'] = массив (
        '#theme' => 'Feed_icon',
        '#url' => 'Rss.xml',
        '#title' => т ( 'Синдикат'),
      );
      ломать;

    case 'recent':
      if (user_access ('access content')) {
        $ block ['subject'] = t ('Recent content');
        if ($ nodes = node_get_recent (variable_get ('node_recent_block_count', 10))) {
          $ block ['content'] = массив (
            '#theme' => 'Node_recent_block',
            '#nodes' => $ узлов,
          );
        }
        else {
          $ block ['content'] = t («Нет содержимого.»);
        }
      }
      ломать;
  }
  return $ block;
}
? & GT;
 

Обратитесь к странице API блоков на Drupal.org для полного списка крючков. Drupal 6 немного отличается. Нет hook_block_view hook; вместо этого используйте hook_block , чтобы объявить блоки.

ответил MAJ 4 52016vEurope/Moscow11bEurope/MoscowFri, 04 Nov 2016 05:04:22 +0300 2016, 05:04:22
6

Для Drupal 6 короткий ответ заключается в том, что вы создаете настраиваемый модуль, который реализует hook_block .

Для Drupal 7 вы используете Блок API . .

Если это ваш первый набег на разработку модуля, я настоятельно рекомендую Pro Drupal Development или Pro Drupal 7 Development . Практически все, что вам нужно знать, находится там.

ответил mpdonadio 21 J0000006Europe/Moscow 2011, 21:34:21
3

Возможно, вы ищете то, что искали, и нашли его здесь:

  

/modules/block/block.module:
  block_custom_block_save ($ edit, $ delta).

Но когда вы посмотрите на эту функцию, вы увидите, что вы можете просто сделать db_update самостоятельно.

  db_update ( 'block_custom')
- & GT; поля (массив (
  'body' => $ Редактировать [ 'тело'] [ 'значение'],
  'info' => $ Редактировать [ 'информация'],
  'format' => $ Править [ 'тело'] [ 'формат'],
))
-> условие ('bid', $ delta)
- & GT; выполнение ();
 
ответил Dan Shumaker 14 Mayam13 2013, 09:42:00
2

В Drupal 7 просмотрите block_add_block_form_submit в modules /block /block.admin.inc .

Это форма создания регулярного блока; он просто вставляет записи напрямую, а не вызывает другую функцию. Обратите внимание: каждая запись в таблице блоков связана с одной темой (вы можете просто использовать активную, но безопаснее вставлять записи для всех тем).

В таблице block_custom содержится содержимое.

ответил richardg 21 J0000006Europe/Moscow 2011, 23:20:20
1

Вы можете использовать Функции Extra для экспорта блоков.

В качестве альтернативы просто создавайте записи непосредственно в таблице блоков.

  INSERT INTO блоки (
  модуль, дельта, тема, статус, вес, регион, обычай,
  дроссельная заслонка, видимость, страницы, заголовок, кеш)
ЗНАЧЕНИЯ (
  'Мнения', 'блог-block_1', 'MyTheme', 1,10, 'sidebar_first', 0,0,1, 'блог \ г \ nblog /*', '', - 1)
 
ответил Dylan Tack 21 J0000006Europe/Moscow 2011, 21:37:55

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132