ec-europa / atomium
一个干净且原子化的基础主题。
Requires (Dev)
- composer/installers: ^1.6
- drupal-composer/preserve-paths: ^0.1.5
- drupal/admin_menu: 3.0.0-rc6
- drupal/composer_autoloader: ^1
- drupal/devel: ^1.7
- drupal/drupal: ^7.67
- drupal/drupal-extension: ~3.4
- drupal/realistic_dummy_content: ^2
- drupal/registryonsteroids: ^1.9
- drupal/xautoload: ^5.7
- drupol/drupal-conventions: ^1.4.15
- drupol/htmltag: ^2.2
- drush/drush: ^8.2.3
- mikey179/vfsstream: ^1.6
- phptaskman/changelog: ^0.2.1
- phptaskman/drupal: ^0.1.15
- phpunit/phpunit: ^5.7
- webflo/drupal-finder: ^1.1
- webmozart/path-util: ^2.3
- dev-7.x-3.x
- dev-nept-2797
- dev-7.x-2.x
- dev-issue-448-bug_item_list_children-7.x-2.x
- dev-issue-455-update_phptaskman
- dev-issue-455-update_taskman
- dev-issue-452-improve-hook-suggestion
- dev-issue-446-bug_fix_item_list-7.x-2.x
- dev-397-pager-component-more-flexibility
- dev-381-get-rid-of-html-tag
- dev-436-update-status-messages
- dev-390-atomium-overview-one-page-per-component-pol-7.x-3.x
- dev-390-atomium-overview-one-page-per-component-7.x-2.x
- dev-390-atomium-overview-one-page-per-component-7.x-3.x
- dev-343-fix-breadcrumb-anchor-7.x-2.x
- dev-275-update-readme-file-7.x-2.x
- dev-155-atomium_theme_registry_alter-optimize
- dev-130-optimize-attributes-classes
- dev-NEPT-1627_visual_regression_with_backstop
- dev-7.x-1.x
- dev-master
This package is auto-updated.
Last update: 2024-09-05 23:51:13 UTC
README
Atomium 主题是 Drupal 7 的基础主题。
本基础主题的目的是重写 Drupal 核心主题函数的大部分,并使用合适的渲染数组和模板。这将使用户能够使用预处理函数或提供自定义模板来自定义自定义子主题中的大多数元素。
目录
安装 & 需求
自 7-x-3.x 分支以来,Atomium 需要 Registry on steroids 模块及其子模块安装并启用。
由于主题技术依赖于模块,请确保已启用这些模块。
需求
- PHP: 大于或等于版本 5.6。
- Drupal 7: 最新稳定版本
- Drupal contrib 模块: Registry on steroids
激活
要启用此主题,请转到 admin/appearance
并选择基于 Atomium 的主题。
Atomium 包含“Atomium Bartik”子主题,作为示例提供,也可以用作启动器。它是基于 Bartik 核心主题的分支,但基于 Atomium。
子主题提供 preprocess 函数和模板的示例,允许快速构建自定义主题。
配置
Atomium 不打算成为一个功能齐全的主题,如 drupal.org 上的大多数主题,具有丰富的可配置设置和友好的用户界面。本主题的唯一目的是提供易于扩展的干净标记。
然而,Atomium 提供以下设置
- 允许 CSS 双下划线。
主题调试模式设置已移动到 Registry on steroids 模块。
截至 Drupal 7.51,已添加新的 allow_css_double_underscores
变量,允许在 CSS 标识符中使用双下划线(.example__selector
)。为了允许 CSS 标识符包含双下划线(.example__selector
)以符合 Drupal 的 BEM-style naming standards,可以将此变量设置为 TRUE。
贡献
Atomium 采用 EUPL 许可证。Atomium 及其子主题的所有贡献均提交至 Github,主 Atomium 存储库。
为确保其代码质量,Atomium 依赖于
为了使用它并通过自动化测试,运行
使用 Docker Compose
通过使用 Docker 和 Docker Compose,可以非常简单方便地加速开发环境。
Docker提供了必要的服务和工具,例如Web服务器和数据库服务器,以独立于主机机器配置运行网站。
需求
配置
默认情况下,Docker Compose读取两个文件,一个是docker-compose.yml
,另一个是可选的docker-compose.override.yml
文件。按照惯例,docker-compose.yml
包含通用配置,并提供默认值。覆盖文件,正如其名称所暗示的,可以包含现有服务的配置覆盖或完全新的服务。如果服务在两个文件中都有定义,Docker Compose将合并配置。通过使用.env
文件定义变量,例如PHP版本,可以在不启动容器的情况下快速调试docker-compose,并且避免硬编码值。
docker-compose config
有关Docker Compose扩展机制的更多信息,请参阅官方Docker Compose文档。
用法
首先,运行
docker-compose up
建议不要将docker-compose
作为守护进程运行,这样它可以在不再需要时快速关闭(按CTRL+C
)。然而,可以通过使用标志-d
来在后台运行docker。
docker-compose up -d
然后
docker-compose exec web composer install docker-compose exec web ./vendor/bin/taskman drupal:site-install
使用默认配置,开发站点文件应在build
目录中,开发站点可在: http://127.0.0.1:8080/build。
运行测试
要运行grumphp检查
docker-compose exec web ./vendor/bin/grumphp run
要运行phpunit测试
docker-compose exec web ./vendor/bin/phpunit
没有Docker
composer install
这将
- 在
./build
中构建目标测试站点 - 运行
$ ./vendor/bin/taskman drupal:site-setup
,这将设置站点和测试配置文件,如phpunit.xml
之后
- 将
taskman.yml.dist
复制到taskman.yml
,并根据您的本地环境进行自定义 - 通过运行
$ ./vendor/bin/taskman drupal:site-install
安装站点
要查看可用命令,请运行
./vendor/bin/taskman
生成更改日志
将您的令牌放在taskman.yml
文件中
github: token: YOUR_TOKEN
然后
./vendor/bin/taskman github:changelog
有关如何自定义构建过程的更多信息,请参阅PHP Taskman项目页面。
扩展
Atomium提供了一种通过仅创建一些文件来扩展的方法,而无需修改Atomium核心文件。每个主题定义,无论是核心的还是自定义的,都被视为一个组件。主题定义可以在每个子主题的templates目录中找到。
要创建新的主题定义
- 在templates中创建一个目录,并按需命名。一个好的做法是给它起定义的名称。
- 创建文件[主题定义名称].component.inc,
- 创建函数[主题名称]_atomium_theme_[主题定义名称](),
- 创建文件[主题定义名称].css和/或[主题定义名称].js以自动加载这些文件。
Atomium提供了一个可在路径atomium-overview
上访问的定制页面。此特定页面仅对具有_administer themes_
权限的用户可用。
此页面充当组件的展示页。要添加组件,需要自定义组件定义两个钩子
-
hook_atomium_definition_hook()
此钩子允许定义一个组件。
-
hook_atomium_definition_form_hook()
此钩子允许在Drupal表单中定义一个或多个组件。
为了更好地理解和示例,请参阅atomium.api.php文件。
每次添加或删除新的主题定义或处理/预处理器时,请务必清除缓存。
开发者注意事项
在开发此项目期间,我们投入了大量时间分析Drupal核心功能的实现以及如何改进它们以实现更好的自定义。
一个很好的例子是面包屑生成。
让我们分析一下Drupal中目前是如何实现的,以及在这个项目中是如何实现的。
$variables['breadcrumb'] = theme('breadcrumb', array('breadcrumb' => drupal_get_breadcrumb()));
默认情况下,Drupal在其template_process_page()
钩子中使用drupal_get_breadcrumb()
函数。
drupal_get_breadcrumb()
函数返回原始HTML。因此,无法正确修改面包屑链接。
为了获取渲染数组,需要进行更深入的分析并相应地重写函数。
drupal_get_breadcrumb()
调用了menu_get_active_breadcrumb()
。实际上,这是返回HTML的函数。
由于该函数返回的是一个原始HTML链接数组,因此无法修改其结果。
遗憾的是,为了改变这种行为,在Atomium中实现了两个额外的函数,同时面包屑的生成方式也发生了变化,如以下所示,覆盖了默认的生成方式
$variables['breadcrumb'] = array( '#theme' => array('breadcrumb'), '#breadcrumb' => atomium_drupal_get_breadcrumb(), );
atomium_drupal_get_breadcrumb()
是Atomium内部函数,仅用于处理面包屑。它不是调用menu_get_active_breadcrumb()
,而是调用atomium_menu_get_active_breadcrumb()
,这也是一个自定义的Atomium函数,它不是返回一个原始HTML链接数组,而是返回一个渲染数组。
这就是为什么在page.tpl.php
中,应该写成
<?php print $breadcrumb; ?>
而不是
<?php print render($breadcrumb); ?>
渲染过程是Drupal预处理、处理和渲染函数链的最后一步。