zeroseven / pagebased
创建基于页面的扩展的终极工具
Requires
- php: ^8.0 | ^8.1
- ext-json: *
- ext-pdo: *
- symfony/property-access: *
- typo3/cms-core: ^12.4.0
- dev-master
- v1.3.1
- v1.3.0
- v1.2.0
- v1.1.0
- v1.0.0
- v0.17.2
- v0.17.1
- v0.17.0
- v0.16.2
- v0.16.1
- v0.16.0
- v0.15.1
- v0.15.0
- v0.14.0
- v0.13.1
- v0.13.0
- v0.12.0
- v0.11.0
- v0.10.2
- v0.10.1
- v0.10.0
- v0.9.0
- v0.8.0
- v0.7.0
- v0.6.0
- v0.5.0
- v0.4.1
- v0.4.0
- v0.3.0
- v0.2.0
- v0.1.0
- dev-TYPO3_13
- dev-cherry-pick-75c8ab55
- dev-feature/related-posts
- dev-feature/globale-categories
- dev-feature/hide-objects-in-menu
- dev-feature/dashboard-widget
This package is auto-updated.
Last update: 2024-09-18 22:00:54 UTC
README
在TYPO3后端以“正常”的TYPO3页面轻松管理新闻、事件、博客文章、工作等对象。此扩展为您提供必要的插件和过滤器、分类、标签和其他有用功能。
页面与记录
此扩展不是像页面那样以复杂的方式显示记录,而是使用现有的内容元素利用整个TYPO3带宽来显示内容。除了pagebased扩展的附加功能外,所有已知的TYPO3功能,如元数据、翻译处理、缓存、网站地图和URL,都无需任何配置即可使用。
快速实现,代码量小
从新闻到博客文章、工作机会或事件,页面对象通常有很多共同点。通过配置,您可以根据需要为每个页面对象激活或停用单个功能。
- 列表插件
- 过滤器插件
- 标签
- 分类
- 联系人
- 关系
- RSS源
此外,各个页面对象的全部逻辑和功能都包含在pagebased扩展中。这样,控制器、存储库、分页等都可以集中控制,并易于更新。此外,只需几秒钟就可以创建新的对象——试试看!
创建自己的扩展
通过从扩展模板构建,可以快速、轻松地创建新的Pagebased扩展。
- 安装 cookiecutter
- 运行
cookiecutter pagebased/Resources/Private/ExtensionDummy
您将被要求输入视图变量,如扩展密钥、对象名称等。之后,将为您生成一个新配置的扩展。
配置
对象注册
在您的 ext_localconf.php
中创建一个新的注册
call_user_func(static function () { $object = \Zeroseven\Pagebased\Registration\ObjectRegistration::create('Job') ->setClassName(\Vendor\NewExtension\Domain\Model\Job::class) ->setControllerClass(\Vendor\NewExtension\Controller\JobController::class) ->setRepositoryClass(\Vendor\NewExtension\Domain\Repository\JobRepository::class) ->setSorting('title') // Sort jobs by their title (backend and frontend) ->enableDate() // Enable date field for job objects ->enableTop() // Enable top feature for job objects ->enableTags() // Enable tag feature for job objects, so tagging and filtering tags is possible ->enableTopics(24) // Enable topics for jobs and give it a pid where to store these ->enableContact(24); // Enable responsible contact person for job objects $category = \Zeroseven\Pagebased\Registration\CategoryRegistration::create('Job-Category') ->setClassName(\Vendor\NewExtension\Domain\Model\Category::class) ->setRepositoryClass(\Vendor\NewExtension\Domain\Repository\CategoryRepository::class) ->setDocumentType(44) // Set document type for category pages (required!) ->setSorting('title'); // Set default sorting for category pages $listPlugin = \Zeroseven\Pagebased\Registration\ListPluginRegistration::create('Job list') ->setDescription('Display jobs in a super nice list') ->addLayout('two-columns', 'Two columns'); // Additional layout option for the fluid template (available via "{settings.layout}") $filterPlugin = \Zeroseven\Pagebased\Registration\FilterPluginRegistration::create('Job filter') ->setDescription('Filter jobs'); \Zeroseven\Pagebased\Registration\Registration::create('extension_name') ->setObject($object) ->setCategory($category) ->enableListPlugin($listPlugin) ->enableFilterPlugin($filterPlugin) ->store(); });
覆盖现有注册
如果您想覆盖现有注册,事件 BeforeRegistrationEvent
允许您访问所有属性并在pagebased扩展执行其余操作之前更新它们。
或者,将自动创建一个扩展配置模板。使用TYPO3 InstallTool的设置模块来覆盖默认值。
扩展插件flexForm
使用AddFlexFormEvent
来扩展插件flexForm。示例
<?php declare(strict_types=1); namespace Zeroseven\Jobs\EventListener; use Zeroseven\Pagebased\Registration\Event\AddFlexFormEvent; class ExtendFlexFormEvent { public function __invoke(AddFlexFormEvent $event) { $flexFormConfiguration = $event->getFlexFormConfiguration(); if ($flexFormConfiguration->getType() === 'jobs_list' && $sheet = $flexFormConfiguration->getSheet('filter')) { $sheet->addField('settings.customField', [ 'type' => 'input', 'eval' => 'trim,required' ], 'Custom field'); } } }
扩展您的模板
TypoScript
用户对象
page.1684843032 = USER
page.1684843032 {
userFunc = Zeroseven\Pagebased\Utility\RenderUtility->renderUserFunc
file = EXT:my_extension/Resources/Private/Templates/Info.html
registration = my_registration_identifier, another_registration_identifier
}
数据处理程序
# Example to show the next object
page.1686075417 = HMENU
page.1686075417 {
special = browse
special.items = next
1 = TMENU
1.NO {
doNotLinkIt = 1
stdWrap.cObject = FLUIDTEMPLATE
stdWrap.cObject {
file = EXT:zeroseven_projects/Resources/Private/Templates/Info/Next.html
dataProcessing.10 = Zeroseven\Pagebased\DataProcessing\ObjectProcessor
dataProcessing.10 {
uid.data = field:uid
registration = my_registration_identifier
}
}
}
}
自定义内容元素
创建自定义内容元素来显示对象信息
tt_content.my_content_element =< lib.contentElement
tt_content.my_content_element {
templateName = MyContentElement
templateRootPaths.1687792159 = EXT:my_extension/Resources/Private/Templates/Content/
dataProcessing.1687792159 = Zeroseven\Pagebased\DataProcessing\ObjectProcessor
dataProcessing.1687792159.registration = my_registration_identifier
}
条件
TypoScript
page.10 = TEXT
page.10.value = It's a normal page.
[my_registration_identifier.object]
page.10.value = Nice! It's an object.
[my_registration_identifier.category]
page.10.value = This is a category page.
[global]
Fluid
<html xmlns:pagebased="http://typo3.org/ns/Zeroseven/Pagebased/ViewHelpers" data-namespace-typo3-fluid="true"> <pagebased:condition.isObject registration="my_registration_identifier"> <p>Nice! It's an object.</p> </pagebased:condition.isObject> <pagebased:condition.isCategory registration="my_registration_identifier"> <p>This is a category page.</p> </pagebased:condition.isCategory> </html>
命令和任务
使用命令 pagebased:detection
更新类别和对象页面的注册信息。示例
如果您更改注册的标识符或通过API添加页面,这可能很有用。
RSS源
每个使用的pagebased列表插件都可以同时作为RSS源访问。要实现这一点,只需将 /-/rss.xml
(例如:https://www.example.com/news/-/rss.xml
)附加到URL即可。您就有了带有相应列表插件所有设置的RSS源!
注意:当一个页面包含多个列表插件时,将使用第一个插件。
常见问题解答(FAQ)
对象可以扩展吗?
是的。在TYPO3中,整个结构都是基于extbase的MVC概念。因此,单个类可以被覆盖和扩展。页面对象中的新属性将自动识别,可以直接用于过滤。
这是一个扩展构建器吗?
不是。功能逻辑集中在基于页面的扩展中。这样,项目中不会有冗余代码,并且可以轻松更新。
项目中可以同时运行多个页面对象吗?
是的,项目中的任何数量的对象,如工作、新闻等,都可以同时运行。它们可以配置不同,但仍可使用相同的代码。
页面对象是否进行了SEO优化?
TYPO3提供的所有SEO功能都可以在详情页面上无限制使用。此外,可以通过PSR14事件添加结构化数据。
是否可以集中使用相同的联系人和主题?
是的,您可以灵活地为每个页面对象定义一个或多个存储文件夹。这意味着联系人和主题可以一起使用或单独用于页面对象。编辑器在管理界面中会收到有关对象的提示,例如可用的联系人。
我必须创建对象类别吗?
是的!对象类别的子页面将自动识别为对象。因此,需要先创建一个类别。类别与对象类似,类似于“普通”的TYPO3页面。