2016-02-11 7 views
3

Я разрабатываю пользовательский модуль в Drupal 8. Он показывает данные о некоторых организациях, которые используют наш сервис. Для этого я создал контроллер, который показывает данные из базы данных, которые помещаются туда другим модулем. Из скудной информации и учебников, доступных по разработке Drupal 8, я смог создать следующее. В .routing.yml файла я создал путь к этой обзорной таблице, как так (это не правильно скопировать здесь, но отступы в порядке):Мой пользовательский блок в Drupal 8 не отображается в блочном макете

OrganizationOverview.world: 
    path: '/world' 
    defaults: 
     _controller:  'Drupal\OrganizationOverview\Controller\OrganizationOverviewController::overview' 
    _title: 'World' 
    requirements: 
    _role: 'administrator' 
    _permission: 'access content' 

Так что теперь обзор доступен с URL site.com/world , Но мы хотим показать его на главной странице или показать его где-нибудь еще на сайте. Для этого он должен быть Блоком. Для этого я создал класс OrganizationOverviewBlock в OrganizationOverview/src/Plugin/Block/OrganizationOverviewBlock.php, который является правильным способом в соответствии со стандартом PSR-4. Класс выглядит следующим образом:

<?php 

namespace Drupal\OrganizationOverview\Plugin\Block; 

use Drupal\Core\Block\BlockBase; 
use Drupal\Core\Session\AccountInterface; 

/** 
* Provides a 'OrganizationOverviewBlock' block. 
* 
* @Block(
* id = "organization_overview_block", 
* admin_label = @Translation("OrganizationOverviewBlock"), 
* category = @Translation("Custom") 
*) 
*/ 
class OrganizationOverviewBlock extends BlockBase 
{ 


    public function build() 
    { 
     return array(
      '#markup' => 'Hello World', 
     ); 
    } 

    public function blockAccess(AccountInterface $account) 
    { 
     return $account->hasPermission('access content'); 
    } 

} 

Так что теперь она должна отображаться на странице Blocks Layout (после промывки кэша, который я делаю последовательно) в site.com/admin/structure/block/, как «Организация Обзор блока», где я должен включить его, в соответствии с много источников (Create custom Block, Block API Drupal 8). Но он не появляется там. Я попытался реализовать ContainerFactoryPluginInterface с некоторыми из этих методов, но ничего не меняет. Он не появляется. Я пробовал создать новый тестовый модуль с блоком с тем же кодом, но более простым именем, и он не появляется. Я скопировал код на другую платформу (производственный сайт), но он также не отображается там. Что я делаю не так? Кто-нибудь может мне помочь? Я знаю, что Drupal 8 является новым, но этот модуль действительно скоро должен быть опубликован.

+0

Я голосую за этот вопрос должен быть закрыт на StackOverflow, и переехал в [Drupal ответы] (http://drupal.stackexchange.com). Я думаю, у вас будет больше шансов на полезный ответ. – marcvangend

+0

проверить это http://stackoverflow.com/a/37856161/1153703 –

ответ

4

Вы найдете рабочий пример создания пользовательского блока в проекте Drupal Examples. Итак:

  • Получить Drupal 8 examples проект
  • Включить блок Пример модуля
  • Дважды проверьте рабочий код

с этим, вы должны получить ваш блок имеющийся в вашем собственном модуле

Вы также можете воспользоваться тем, что объясняет here, где каждый файл php выполняет всю работу. Проверьте также путь к файлам и папкам.