makinacorpus / drupal-udashboard
Drupal的高级仪表板API
Requires
- makinacorpus/drupal-sf-dic: >=3.2.3
- symfony/dependency-injection: ^3.1
- symfony/event-dispatcher: ^3.1
- symfony/http-foundation: ^3.1
- symfony/security: ^3.1
Requires (Dev)
- phpunit/phpunit: ^5.1
This package is auto-updated.
Last update: 2024-09-10 21:20:47 UTC
README
此初始版本是来自https://github.com/makinacorpus/drupal-ucms Drupal模块套件的ucms_dashboard的原始导出。只更改了命名空间,并将一些实用函数从ucms_contrib模块移动出来。
它应该足够稳定,可以使用。
安装
它严重依赖于makinacorpus/drupal-sf-dic,最简单的安装方法是
composer install makinacorpus/drupal-udashboard
配置
运行时配置
启用顶部工具栏
$conf['udashboard.context_pane_enable'] = true;
启用上下文面板
$conf['udashboard.context_pane_enable'] = true;
启用管理页面面包屑修改
这是一个用于UCMS的具体设置。
$conf['udashboard.breadcrumb_alter'] = true;
显示配置
禁用自定义CSS
如果您希望将此模块的CSS或自定义LESS嵌入到自己的自定义主题中,您可能希望禁用CSS加载
$conf['udashboard.disable_css'] = true;
Drupal七主题修复
将此设置为true
,将始终包含七个修复
$conf['udashboard.seven_force'] = true;
将其设置为false
,则始终删除。
删除变量或将其设置为null
,则在运行时将自动检测七个管理主题,并在必要时加载修复。
用法
哲学
此模块采用SOLID原则的哲学,为了使其工作,您需要创建
- 一个控制器
- 一个数据源
- 一个twig模板
- 可能还需要一个ActionProvider
为了演示这一点,我们将替换Drupal核心的用户管理。
与Drupal绑定
/** * Implements hook_menu_alter(). */ function mymodule_menu_alter(&$items) { $items['admin/people']['page callback'] = 'sf_dic_page'; $items['admin/people']['page arguments'] = [AccountController::class . '::accountList']; }
当点击admin/people
时,将调用AccountController::actionListAction
方法。
控制器
<?php use MakinaCorpus\Drupal\Dashboard\Controller\PageControllerTrait; use MakinaCorpus\Drupal\Sf\Controller; use Symfony\Component\HttpFoundation\Request; /** * User admin */ class AccountController extends Controller { /** * Main list * * @param \Symfony\Component\HttpFoundation\Request $request * @return string */ public function accountListAction(Request $request) { /** @var \MakinaCorpus\Drupal\Dashboard\Page\DatasourceInterface $datasource */ $datasource = $this->get('mymodule.datasource.account'); return $this ->createPageBuilder() ->setDatasource($datasource) ->setAllowedTemplates( [ 'table' => 'module:mymodule:Page/page-account.html.twig', ] ) ->showFilters() ->showSort() ->showSearch() ->setDefaultDisplay('table') ->searchAndRender($request) ; } }
如您所见,我们的控制器依赖于数据源和模板。
数据源
一个DefaultAccountDatasource
可用,并抽象了查询users
表的主要部分,但您可以添加您自己的排序等。
<?php namespace MyModule\Page; use MakinaCorpus\Drupal\Dashboard\Page\Account\DefaultAccountDatasource; use MakinaCorpus\Drupal\Dashboard\Page\PageState; /** * Account Datasource */ class AccountDatasource extends DefaultAccountDatasource { /** * Add our own columns * * @inheritdoc */ public function getSortFields($query) { $sortFields = parent::getSortFields($query); $sortFields['m.myfield_value'] = "my field"; return $sortFields; } protected function applyFilters(\SelectQueryInterface $select, $query, PageState $pageState) { $select->leftJoin('field_data_myfield', 'm', 'm.entity_id = u.uid'); } }
它必须在您的mymodule.services.yml
中声明。
services: mymodule.datasource.account: public: true shared: false class: MyModule\Page\AccountDatasource arguments: ["@database", "@entity.manager"]
模板
该模板扩展自module:udashboard:views/Page/page.html.twig
,它为显示项表提供了主要组件。您只需要覆盖列和行即可。
{% extends 'module:udashboard:views/Page/page.html.twig' %} {%- block item -%} <tr class="separator"> <td>{{ item.name }}</td> <td>{{ item.myfield.und.0.value }}</td> <td> <ul> {% for role in item.roles %} {% if role != 'authenticated user' %} <li>{{ role }}</li> {% endif %} {% endfor %} </ul> </td> <td>{{ item.created|date('d/m/Y H:i') }}</td> <td>{{ item.access|date('d/m/Y H:i') }}</td> <td>{{ item.status ? 'Yes'|t : 'No'|t }}</td> <td class="actions">{{ udashboard_primary(item) }}</td> </tr> {%- endblock -%} {% block item_list %} <table class="table table-striped table-condensed table-demandes"> <thead> <tr> <th>Name</th> <th>My Field</th> <th>Roles</th> <th>Member since</th> <th>Last access</th> <th>Status</th> <th></th> </tr> </thead> <tbody> {% for item in items %} {{ block('item') }} {% else %} <tr> <td colspan="9"> No account to display. </td> </tr> {% endfor %} </tbody> </table> {% endblock %}
操作提供者
操作提供者不是必需的,但它允许在项上添加操作。例如,对于帐户
<?php namespace MyModule\Action; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\user\User; use MakinaCorpus\Drupal\Dashboard\Action\Action; use MakinaCorpus\Drupal\Dashboard\Action\ActionProviderInterface; /** * Action provider for accounts */ class AccountActionProvider implements ActionProviderInterface { use StringTranslationTrait; /** * @inheritdoc */ public function getActions($item, $primaryOnly = false, array $groups = []) { $ret = []; $ret[] = new Action($this->t("Edit"), 'user/'.$item->id().'/edit', null,'pencil', 0, true, false); $ret[] = new Action($this->t("Delete"), 'user/'.$item->id().'/cancel', null, 'trash', 2, true, false); return $ret; } /** * {@inheritDoc} */ public function supports($item) { return $item instanceof User; } }
它必须在您的mymodule.services.yml
中声明。
services: mymodule.account_action_provider: public: false class: MyModule\Action\AccountActionProvider tags: [{name: udashboard.action_provider}]