pickles2 / px2-multitheme
px2-multitheme 为 Pickles 2 添加了管理多个主题的功能。
Requires
- php: >=7.3.0
Requires (Dev)
- phpdocumentor/phpdocumentor: ~3.0.0
- phpunit/phpunit: ~9.5
- pickles2/broccoli-module-plain-html-elements: ~0.1
- pickles2/px-fw-2.x: ~2.1|~2.0
- pickles2/px2-px2dthelper: ~2.0
- tomk79/filesystem: 1.*
README
px2-multitheme 为 Pickles2 添加了管理多个主题的功能。
安装方法 - 设置
设置 Pickles 2。
在 composer.json
同级目录下,执行以下命令:
composer require pickles2/px2-multitheme
接下来,在 px-files/config.php
中添加设置。
$conf->funcs->processor->html = [ // テーマ 'theme'=>'tomk79\pickles2\multitheme\theme::exec' , ];
配置选项 - 配置选项
主题切换的参数名 - param_theme_switch
设置用作主题切换的 GET 参数名。默认为 THEME
。
存储主题名的cookie名 - cookie_theme_switch
设置存储切换后主题名的cookie名。默认为 THEME
。
布局切换的参数名 - param_layout_switch
设置用作布局切换的 GET 参数名。默认为 LAYOUT
。
主题集合目录 - path_theme_collection
设置包含主题的目录的路径。相对路径的起点是 .px_execute.php
所在的路径。
默认值为 ./px-files/themes/
。
px2-multitheme 还会搜索 vendor 目录中加载的包的列表,并将实现了主题的包添加为选择候选项。
存储 bowl 名(内容区域名)的属性名 - attr_bowl_name_by
这是 Pickles2DesktopTool 的 GUI 编辑功能对应的设置。Pickles2DesktopTool 会根据这里设置的属性值从 bowl 名中获取内容,并按 GUI 编辑界面的结构进行操作。默认为 data-contents-area
。
默认主题 ID - default_theme_id
默认应用的主题的 ID。初始值为 default
。
如果指定了主题集合目录中定义的主题,则如 theme_id
之类的目录名,如果从 composer 包指定主题,则如 vendorname/packagename
之类的、用斜杠分隔的包名进行设置。
选项 - options
设置主题单独定义的选项值。可设置的选项因主题而异。有关详细信息,请参阅各个主题的文档。
配置选项实现示例 - 配置示例
$conf->funcs->processor->html = [ // テーマ 'theme'=>'tomk79\pickles2\multitheme\theme::exec('.json_encode([ 'param_theme_switch'=>'THEME', 'cookie_theme_switch'=>'THEME', 'param_layout_switch'=>'LAYOUT', 'path_theme_collection'=>'./px-files/themes/', 'attr_bowl_name_by'=>'data-contents-area', 'default_theme_id'=>'pickles2', 'options'=>array( 'pickles2'=>array( // テーマ pickles2 に対するオプション 'sample_param'=>'hoge' // テーマ側からは、 `$theme->get_option('sample_param')` で受け取ることができます。 ) ) ]).')' ];
主题实现
每个主题都作为目录安装在主题集合目录的底部。例如,名为 sample
的主题将在目录 <theme_collection_dir>/sample/
中实现。
在主题目录的底部,可以按照 (布局名).html
的命名规则定义多个布局。
规定的布局有 default.html
(=默认), popup.html
, top.html
, plain.html
, naked.html
,并在网站地图 CSV 的 layout
列中指定名称进行选择。有关此用法,请参阅 Pickles 2 的文档。
主题布局中可用的主要 API
Pickles 2 的 API
Pickles 2 提供的 API 中,在主题实现中经常使用的 API 有以下几种。有关详细用法,请参阅 Pickles 2 的 API 文档。
$px->href()
$px->mk_link()
$px->conf()
$px->bowl()->pull()
$px->site()->get_current_page_info()
$px->site()->get_children()
$px->site()->is_page_in_breadcrumb()
$px->site()->path_plugin_files()
$px->site()->get_category_top()
px2-multitheme 提供的 API
除了 Pickles 2 中的功能之外,px2-multitheme 还提供了一些独特的 API。
$theme->get_option()
$theme->get_layout()
$theme->get_attr_bowl_name_by()
$theme->files()
$theme->mk_global_menu()
$theme->mk_shoulder_menu()
$theme->mk_sub_menu()
$theme->mk_megafooter_menu()
$theme->mk_breadcrumb()
theme_files
在主题文件夹的底部设置目录 theme_files/
,可以将主题特有的资源文件(图像或 CSS 等)放在这里。
在 theme_files
中放置的文件将在 Pickles 2 的公开缓存目录(默认为 /caches/*
) 中创建副本,并可以通过浏览器访问。
从主题调用这些文件时,请按以下方式实现。
<p>'theme_files/hoge/fuga.png' を呼び出す</p> <img src="<?= htmlspecialchars( $theme->files('/hoge/fuga.png') ); ?>" alt="" />
主题包的公开
主题可以作为独立的包在 Packagist 等处公开。
在 /theme/default.html
中设置默认布局。 /theme/
以下的配置与主题集合相同。
更新日志 - 变更日志
pickles2/px2-multitheme v2.1.1 (2023年2月11日)
- 内部代码的微小修正。
pickles2/px2-multitheme v2.1.0 (2022年1月8日)
- 将支持的 PHP 版本更改为
>=7.3.0
。 - 支持 PHP 8.1。
pickles2/px2-multitheme v2.0.6 (2018年8月30日)
- 修复了细微的错误。
pickles2/px2-multitheme v2.0.5 (2018年1月24日)
- 添加了新的设置项目
$param_layout_switch
。通过 GET 参数可以暂时切换布局并显示。 - 可以使用
./theme_files/〜〜
这样的描述来访问主题资源。$theme->files()
会自动调用并替换。
pickles2/px2-multitheme v2.0.4 (2017年7月28日)
- 修复了在同时访问不同主题时资源路径混用的问题。
pickles2/px2-multitheme v2.0.3 (2017年7月11日)
- 将
$theme
中的非主题模板实现方法的方法从$theme
中分离并隐藏。 - 添加了
$theme->files()
。 - 可以通过
px2package
引用来搜索主题。
pickles2/px2-multitheme v2.0.2 (2016年7月27日)
- 当面包屑上存在当前页面时,不会变成链接。
- 在选择错误的主题 ID 时,会以假主题包裹并返回页面。
- 其他错误修复和性能提升。
pickles2/px2-multitheme v2.0.1 (2016年6月30日)
- 更改了本地导航的生成规则:面包屑上没有的页面的子元素不会打开。
pickles2/px2-multitheme v2.0.0 (2016年3月4日)
- 初版发布。
许可 - License
MIT 许可证
作者 - Author
- Tomoya Koyanagi tomk79@gmail.com
- 网站: https://www.pxt.jp/
- Twitter: @tomk79 https://twitter.com/tomk79/
开发者信息 - for Developer
测试 - Test
$ php ./vendor/phpunit/phpunit/phpunit