多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
Drupal module demo - module_hero_v4 文件: module_hero.info.yml module_hero.libraries.yml module_hero.module module_hero.routing.yml css/animate.css src/Controller/HeroController.php templates/hero-list.html.twig module_hero.info.yml: ``` name: "Module Hero" description: "We are going to be Drupal 8 module heros at the end" type: module core: 8.x ``` module_hero.libraries.yml ``` hero-style: css: theme: css/animate.css: {} ``` module_hero.module ``` <?php function module_hero_theme($existing, $type, $theme, $path) { return [ 'hero_list' => [ 'variables' => ['items' => [], 'title' => ''], ] ]; } ``` module_hero.routing.yml: ``` module_hero.herolist: path: '/herolist' defaults: _controller: '\Drupal\module_hero\Controller\HeroController::heroList' _title: 'Our super heroes list' requirements: _permission: 'access content' ``` css/animate.css https://raw.githubusercontent.com/daneden/animate.css/master/animate.css src/Controller/HeroController.php: ``` <?php namespace Drupal\module_hero\Controller; use Drupal\Core\Controller\ControllerBase; class HeroController extends ControllerBase { public function heroList() { $heroes = [ ['name' => 'Neo1'], ['name' => 'Neo2'], ['name' => 'Neo3'], ['name' => 'Neo4'], ['name' => 'Neo5'], ['name' => 'Neo6'], ['name' => 'Neo7'], ['name' => 'Neo8'] ]; return [ '#theme' => 'hero_list', '#items' => $heroes, '#title' => $this->t('Our wonderful heroes list'), ]; } } ``` templates/hero-list.html.twig ``` {{ attach_library('module_hero/hero-style') }} <h4>{{ title }}</h4> <ol> {% for item in items %} <li class="animated {{ random(['bounce', 'flash', 'rubberBand', 'shake', 'tada', 'bounceIn', 'rollIn']) }}">{{ item.name }}</li> {% endfor %} </ol> <strong>This is coming from our custom twig file.</strong> ``` .