zeroseven / z7-blog
TYPO3 的另一个博客系统
Requires
- ext-json: *
- typo3/cms-core: ^12.3
- dev-master
- v1.4.1
- v1.4.0
- v1.3.0
- v1.2.0
- v1.1.4
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.2
- v1.0.1
- v1.0.0
- v1.0.0-RC1
- v0.10.1
- v0.10.0
- v0.9.0
- v0.8.1
- v0.8.0
- v0.7.0
- v0.6.0
- v0.5.0
- v0.4.0
- v0.3.0
- v0.2.7
- v0.2.6
- v0.2.5
- v0.2.4
- v0.2.3
- v0.2.2
- v0.2.1
- v0.2.0
- v0.1.0
- dev-TYPO3-v12
- dev-a.buchmann-master-patch-42017
- dev-feature/php-8
This package is auto-updated.
Last update: 2024-09-19 11:23:02 UTC
README
TYPO3 博客扩展
已弃用
此扩展已被 pagebased_blog(由 pagebased 驱动)取代,它是功能更强大且性能大幅提升的全新继任者。
经过多年的开发和维护 z7_blog,我们提升了整个体验。我们将所有关于此扩展的经验都融入到它的继任者中。
版本 1.4 是此扩展将收到的最后一个功能更新。感谢您过去使用并喜欢我们的博客扩展。
⁉️ 为什么还需要另一个博客扩展?
为最佳开发者
我们热爱 TYPO3 开发者,TYPO3 开发者也热爱这个扩展。从未如此简单地将博客添加到 TYPO3 页面,对其进行自定义,并将信息放置在合适的位置。只需几行代码即可扩展 Extbase 模型,同步帖子页面的内容,或为 ViewHelpers 或存储库创建新的过滤参数。一切尽在你手中。
想要 RSS-Feed 或评论功能?此扩展高度模块化:整个功能可以轻松安装或移除,或为您自己的博客开发功能。这样,您始终只会拥有您真正需要的精确数量的功能和配置。说到需求:您真的需要这个扩展!
顺便说一下,我们当然支持多语言和多域名设置。
为熟练的编辑者
我们热爱 TYPO3 编辑者,TYPO3 编辑者也热爱这个扩展。从未如此简单地进行博客文章和类别的维护和管理,分配标签,并在 TYPO3 页面上输出所有经过筛选和控制的项。由于它与页面和内容元素一样正常工作,您可以立即开始。此外,后端还支持您在页面树中进行自动帖子排序、自动完成和许多其他实用工具,以帮助您快速完成任务。
为成功的 SEO
我们热爱 SEO 人员,SEO 人员也热爱这个扩展。为您的网站生成内容的好机会。由于所有帖子都是“常规”TYPO3 页面,因此 TYPO3 核心提供的所有可能性也在这里。这样,您不必担心像在这个博客中基于记录的扩展那样,担心 open graph 数据、网站地图、规范或元标签。一切都在这里。更重要的是,我们为所有帖子添加了结构化数据。
🍭 功能概述
- 基于 TYPO3 页面
- 支持多域名设置
- 扩展的过滤器插件
- 结构化数据
- 变量 AJAX 分页
- 后端自动完成标签
- 页面树中自动排序
- 自定义插件布局
- 自定义流体模板的条件
- 可用的模块化子扩展
- RSS-Feed
- 评论功能
✨ "子扩展"
如前所述:为了使此扩展具有大量功能,但又不使其臃肿,这些功能可以通过我们的子扩展概念进行安装或移除。这样,您也可以向博客添加自己的子扩展。
以下是一些现有子扩展的概述
🔧 安装
通过 composer req zeroseven/z7-blog
获取此扩展。
⚙️ 设置
将帖子详细信息添加到模板中
如果您需要获取每个博客文章的信息,不需要单独维护每一个。使用以下TypoScript在您喜欢的地方为每篇文章添加博客内容。
page.100 = USER
page.100 {
userFunc = Zeroseven\Z7Blog\Utility\PostInfoRenderUtility->renderUserFunc
file = EXT:z7_blog/Resources/Private/Partials/Post/Info/Summary.html
settings {
pass.any = settings
to = the template
}
}
… 或者通过模板中的ViewHelper渲染信息
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:blog="http://typo3.org/ns/Zeroseven/Z7Blog/ViewHelpers" data-namespace-typo3-fluid="true">
<main>
<h1>{page.title}</h1>
<blog:postInfo file="EXT:z7_blog/Resources/Private/Partials/Post/Info/Summary.html" />
</main>
</html>
… 或者渲染自定义内容元素
tt_content.custom_blogpost_info =< lib.contentElement
tt_content.custom_blogpost_info {
templateName = Generic
20 = USER
20 {
userFunc = Zeroseven\Z7Blog\Utility\PostInfoRenderUtility->renderUserFunc
file = EXT:z7_blog/Resources/Private/Partials/Post/Info/Summary.html
}
}
因此,您可以看到,有多种方法可以实现您想要的功能。请随意选择最适合您的方法!
使用不同的布局
通过TSconfig为编辑器添加可选择的布局。在Fluidtemplate中,您可以使用条件,取决于变量 {settings.layout}
。
tx_z7blog.content.[CType].layouts {
sidebar = Sidebar-Teaser
archive = Archive
}
⚠️ CType可以由TCA配置 contentLayoutKey
覆盖。
扩展模型和需求类
您可以通过添加自己的 traits
来扩展领域模型或需求类。
your_extension/Classes/Domain/Traits/PostModel.php:
<?php declare(strict_types=1); namespace Vendor\YourExtension\Domain\Traits; trait PostModel { protected $lol = true; public function getLol(): bool { return $this->lol; } }
your_extension/Classes/Domain/Traits/PostDemand.php:
<?php declare(strict_types=1); namespace Vendor\YourExtension\Domain\Traits; class PostDemand { /** @var bool */ public $navHide = false; /** @var array */ public $keywords = []; }
your_extension/ext_localconf.php:
<?php call_user_func(static function () { // Load post trait collector instead of the "default" model $extbaseObjectContainer = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\Container\Container::class); $extbaseObjectContainer->registerImplementation(\Zeroseven\Z7Blog\Domain\Model\Post::class, \Zeroseven\Z7Blog\Domain\Model\TraitCollector\PostTraitCollector::class); }); // Register trait $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['z7_blog']['traits'][\Zeroseven\Z7Blog\Domain\Model\Post::class][] = \Vendor\YourExtension\Domain\Traits\PostModel::class; $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['z7_blog']['traits'][\Zeroseven\Z7Blog\Domain\Demand\PostDemand::class][] = \Vendor\YourExtension\Domain\Traits\PostDemand::class;
JavaScript事件
该扩展在前端触发了关于博客文章分页的各种有用JavaScript事件。我们的自定义触发器始终以 z7_blog
开头,以便与潜在的其它自定义事件区分开来。目前可用的事件包括
一个示例实现可能如下所示
document.addEventListener('z7_blog:addToList:complete', e => { console.log('Do something after the new blog posts have been added to the DOM'); });
☝️ 提示: z7_blog:addToList:complete
事件触发器还会传递各种变量,您可以使用它们来修改。例如,所有刚刚添加到列表中的新项目将被传递。
SEO配置
如果使用过滤器作为GET参数,通常建议将其排除在爬虫之外。尤其是当有多个标签和主题的多选时,可能会有成千上万种组合被爬取。
示例robots.txt
Disallow: *tx_z7blog_list%5Btopics%5D=*s
Disallow: *tx_z7blog_list%5Btags%5D=*
结构化数据
每篇文章都会自动获得结构化数据。如果您想扩展这些数据,可以通过TypoScript进行编辑。
示例
plugin.tx_z7blog.settings.post.structuredData {
# Create new attribute "publisher"
publisher {
# Define type "Organisation"
typeOrganization {
# … and so on
name = zeroseven design studios GmbH
logo.typeImageObject {
url = https://www.zeroseven.de/resources/logo.png
width = 365
height = 28
}
}
}
}
要创建一个新的 @type
,您可以在配置中用相应的 type
前缀。
流体模板和TypoScript的自定义条件
我们的博客为您的流体模板和TypoScript设置提供自定义条件。最好通过提供简单的示例来展示。假设您想在所有标题中添加一些额外内容,但仅限于博客文章
流体
<blog:condition.isPost> <span>It's a post</span> </blog:condition.isPost>
TypoScript
[z7_blog.post]
page.10 = TEXT
page.10.value = It's a post
[global]
对于TYPO3 12,只有2个条件可用
[z7_blog.post]
[z7_blog.category]
您还可以将其集成到流体模板的标准 ifViewHelper
中,以实现更高的灵活性
<f:if condition="{media} && {blog:condition.isPost()}"> <f:then> <span>It's a post with an image</span> <f:then> <f:else> <span>It's a "normal" page or the image is missing</span> <f:else> </f:if>
查看z7_blog在Classes/ViewHelpers/Conditions
目录中提供的所有自定义条件。
🚧 待办事项
- 可以通过升级向导运行来自各种TYPO3 Blog扩展的升级
- 集成PSR14事件以控制器、存储库、结构化数据等