Extbase是一个TYPO3 CMS扩展开发框架,与TYPO3 Fluid和TYPO3的Extension Builder密切合作。
在Extbase查询中执行非标准JOIN以获取所有没有翻译的记录
我想使用 JOIN 创建一个 Extbase 查询(在存储库中使用 $query = $this->createQuery(); ),对应于这样的内容 选择job1.uid,job1.pid,job1.sys_language_uid,job1。
TYPO3 v10:如何将 RouteEnhancer 与 ArrayPaginator 一起使用?
我在 Extbase 列表视图中使用 ArrayPaginator,因为 Fluid 小部件功能在 TYPO3 v11 中将不再可用。 我目前正在尝试使用 RouteEnhancer 来实现这一点。 我的清单
actioncontroller 中的 Extbase addAdditionalHeaderData(...),包含相同的 CSS 两次
对于我的 extbase 扩展,我需要一个 CSS,将其包含在所有操作控制器中: $this->响应->addAdditionalHeaderData(' 对于我的 extbase 扩展,我需要一个 CSS,将其包含在所有操作控制器中: $this->response->addAdditionalHeaderData('<link rel="stylesheet" type="text/css" href="' . t3lib_extMgm::siteRelPath($this->request->getControllerExtensionKey()) . 'Resources/Public/css/mystyle.css" />'); 如果我现在有一个页面,其中包含我的扩展的多个插件,则我有多个 CSS 包含: <link rel="stylesheet" type="text/css" href="typo3conf/ext/myext/Resources/Public/css/mystyle.css"> <link rel="stylesheet" type="text/css" href="typo3conf/ext/myext/Resources/Public/css/mystyle.css"> 编辑 我还可以执行以下操作: $GLOBALS['TSFE']->additionalHeaderData[100] = '<link ...>'; 但据我所知,这只是老方法。 多年后,我现在使用 vhs:asset 将 CSS/JS 添加到扩展中: <v:asset.script path="EXT:my_extension/Resources/Public/js/javascript.js" name="collectionjs" standalone="1" /> <v:asset.style path="EXT:my_extension/Resources/Public/css/style.css" name="collectioncss" standalone="1" /> name属性是唯一的,因此如果您有另一个同名的包含,它将覆盖旧的包含。 我通常更喜欢使用静态 TypoScript 包含 CSS 和 JS,因为如果有人想拥有自己的 CSS,它更容易调整。 如果您仅在扩展页面上包含此 TS,则应将其从 TYPO3 CSS-Merger 中排除。 只需使用以下 TypoScript page.includeCSS.myExtCss = EXT:myext/Resources/Public/css/mystyle.css page.includeCSS.myExtCss.excludeFromConcatenation = 1 用老方法解决了: $GLOBALS['TSFE']->additionalHeaderData[$this->request->getControllerExtensionKey()."CSS1"] = '<link rel="stylesheet" type="text/css" href="' . t3lib_extMgm::siteRelPath($this->request->getControllerExtensionKey()) . 'Resources/Public/css/mystyle.css" />'; 对于我包含的每个 CSS 或 JS,我使用另一个后缀:CSS2、CSS3、JS1、JS2 等等。 因此,如果另一个控制器包含相同的文件,它只会覆盖 extraHeaderData 数组中的旧条目。 Use 可以使用类变量来标记您已经包含样式表。该变量的值应该在整个请求中保持活动状态。 在控制器类中,定义类变量/静态属性: public static $includedMyStyle; 在您的控制器操作中: if (!self::$includedMyStyle) { $this->response->addAdditionalHeaderData('<link rel="stylesheet" type="text/css" href="' . t3lib_extMgm::siteRelPath($this->request->getControllerExtensionKey()) . 'Resources/Public/css/mystyle.css" />'); self::$includedMyStyle = true; } 老问题,但值得一提... 你需要改变这里的方法。如果同一页面上有多个相同插件的实例,它们的行为应该不同,则只需使用 FlexForm 为每个实例添加选项,它们应该以 settings 开头,每个由点分隔的部分是下一级一个关联数组,例如: <settings.includeHeaderData> <TCEforms> <exclude>0</exclude> <label>Include header data...</label> <config> <type>check</type> <default>0</default> </config> </TCEforms> </settings.includeHeaderData> 所以在你的行动中你可以像这样使用它: if (intval($this->settings['includeHeaderData']) > 0){ $this->response->addAdditionalHeaderData('<link ...>'); } 或者如果节点所在: <settings.foo.bar.baz.something> ... </settings.foo.bar.baz.something> 您可以在控制器中访问它,例如: $mySetting = $this->settings['foo']['bar']['baz']['something']; 在 TYPO3 v12 中,使用 MetaTag API 将通用元标记添加到 `,例如OpenGraph 标签 AssetCollector链接Javascript和CSS
我尝试使用以下方法从后端模块(ActionController / Repository 类)调试一些内容 \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump()。不幸的是这没有效果。我记得...
说话 url (realurl) 链接未在 extbase 扩展中呈现
我正在开发一个 extbase 扩展,以 json 格式公开站点菜单结构。 PageRepository 为我提供了相关的页面 uid 和标题,因此剩下的唯一挑战是构建正确的...
在我的扩展中,我已将字段级别作为整数添加到数据库中。 TCA将该字段添加到后端。好的 按预期工作。 但我无法访问前端中的字段。 我“看到”了
如何在selectMultipleSideBySide TCA中为fieldControl添加自定义节点为TYPO3 11 LTS添加自定义控件
我下面的TCA在MM表中有很多记录用于并排多项选择。 'select_multiplesidebyside_6' => [ '标签' => 'select_multiplesidebyside_6 fieldControl', ...
我想从我的 extbase 6.2 扩展发送不同的电子邮件。 在控制器类中,我编写了一个邮件函数,如下所示: (注意 $attachment 没有 @param - 请参阅最后我的问题) ...
Extbase TYPO3 - 使用自定义 WHERE 部分扩展查询
我有一个模型(“优惠”),它具有 lat/lng 属性以及许多其他元属性。在存储库方法中,我可以根据匹配的元数据获取报价,例如: $where[] = $qu...
带有自定义 ValueMapper 的 TYPO3 RouteEnhancer
我目前正在尝试实现自定义 RouteEnhancer。 是我一个人的问题,还是文档又严重不完整?我在 TYPO3 中找不到任何有关自定义增强器的信息
我折腾了8个多小时也没有解决。 我想要的只是在 Fluid 模板中调用 ViewHelper。我以前也这样做过,但从未遇到过类似的问题。 我的观点帮助...
我有以下问题: 我有以下问题: <?php declare(strict_types=1); namespace Abc\Def\Services; class TypoScriptProvider extends \TYPO3\CMS\Extbase\Configuration\BackendConfigurationManager { public function __construct() { } public function getTypoScriptSetupByPageid($pageId = null): array { $configurationManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Configuration\\BackendConfigurationManager'); $configurationManager->currentPageId = $pageId; $extbaseFrameworkConfiguration = $configurationManager->getTypoScriptSetup(); return $extbaseFrameworkConfiguration; } } 对于 TYPO3 v12 来说这是可行的,但现在 TYPO3 决定将 BackendConfigurationManager 作为 v13 中的最后一个类。我怎样才能延长这门课? 我试过这个 <?php declare(strict_types=1); namespace Abc\Def\Services; use TYPO3\CMS\Extbase\Configuration\BackendConfigurationManager; class TypoScriptProvider { protected BackendConfigurationManager $backendConfigurationManager; public function __construct(BackendConfigurationManager $backendConfigurationManager) { // Dependency Injection $this->backendConfigurationManager = $backendConfigurationManager; } public function getTypoScriptSetupByPageid(int $pageId = null): array { // Verwende eine Methode, um die Seiten-ID zu setzen $this->backendConfigurationManager->getCurrentPageId($pageId); // Abrufen des TypoScript-Setups $typoScriptSetup = $this->backendConfigurationManager->getTypoScriptSetup(); return $typoScriptSetup; } } 但是currentPageId无法访问,因为它现在受到保护。 ich怎么能做到这一点? @internal 仅在 Extbase 中使用,不是 TYPO3 Core API 的一部分。 来自 PHP-DocBlock 类。该类是内部类,不是公共 API 的一部分。它可以随时更改,而不会破坏或记录公共可用的 API。 重点是,BackendConfigurationManager 绑定到 ServerRequestInterface 并使用这些请求属性和参数。这个类已经被重构为 Symfony DI'able,并且要求必须从该类中删除状态,因为它现在成为一个真正的服务。并且 DI 服务器必须是无状态的,这意味着不再有 current page 属性和 setter/getter。其余的私有方法使用请求信息来检索值,并使用运行时缓存来存储该类外部的状态。 您也不应该直接使用 BackendConfigurationManager,而应该使用 ConfigurationManager,它根据传递的 ServerRequestInterface $request 对象中的属性使用前端或后端管理器。 public function getTypoScriptSetup(ServerRequestInterface $request): array 这是TYPO3 v13中方法的签名。这意味着您需要传递一个请求对象,该对象需要包含要设置的必需属性,因为该类从请求中读取页面信息。 在后端的情况下,它使用帖子正文中的 id 值或在上下文中获取参数。 如果不知道您的确切用例是什么,就很难给出准确的示例和指导来以正确的方式实现它。 您可以尝试创建一个虚假请求,如下例取自 TYPO3 核心测试(TBH 未在真实环境中进行测试): $request = (new ServerRequest())->withQueryParams(['id' => 123]); $typoScriptSetup = $this->backendConfigurationManager->getTypoScriptSetup($request); 对于 BackendConfigurationManager 的另一种方法同样有效,它需要传递 ServerRequestInterace 对象。
我在typo3 中遇到问题,无法通过typenum 访问我的控制器操作。我用的是typo3 v12。我的路线中有以下内容 - 路由路径:'/rss.xml' _controller: '文章::提要' 鲁夫特
我在typo3 中遇到问题,无法通过typenum 访问我的控制器操作。我用的是typo3 v12。我的路线中有以下内容 - 路由路径:'/rss.xml' _controller: '文章::提要' 鲁夫特
通过以下(缩短的)表格,我在 TYPO3 v12 中注册新用户: 通过以下(缩短的)表格,我在 TYPO3 v12 中注册新用户: <f:form action="register" name="registration" object="{registration}" id="register-form"> <f:form.textfield property="login" id="login" /> <f:form.textfield type="password" property="password" id="password" /> </f:form> 验证发生在模型中: class Registration extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity { /** * @var string * @Extbase\Validate("NotEmpty") * @Extbase\Validate("StringLength", options={"minimum": 8, "maximum": 30}) */ protected string $login = ''; /** * @var string * @Extbase\Validate("NotEmpty") * @Extbase\Validate("RegularExpression", options={"regularExpression": "/^.*(?=.{8,})(?=.*[a-zA-Z])(?=.*\d).*$/"}) */ protected string $password = ''; } 提交表单时使用少于八个字符的登录名或密码将再次显示该表单。表单字段将显示提交的数据和相应的错误消息。这是正常行为。 现在我不想想在提交表单后返回密码,该字段应被清空。 我做了以下但没有运气: 我摆弄了控制器的initializeAction,但是当我在这里删除密码时,验证器总是会失败,因为它得到的是空值。 我尝试为表单字段设置默认值,但该值将被提交的值覆盖。 将密码作为名称传递应该可以完成这项工作: <f:form.textfield type="password" name="password" id="password" />
我想在数据库中存储一些选项,如下所示: '问题选项' => [ '排除' => false, '标签' => 'xxx', '描述' => 'xxx', “配置”=>...
我有一个带有列表和显示操作的扩展。目前此扩展可以出现在多个页面上: /第1页/ /第2页/子页面/ 我已经这样配置 realurl: $GLOBALS['TYPO3_CONF_VARS']['
从我的数据库中获取唯一的房间号。 我的表是 tx_example_domain_model_room,其中包含 startdatetime、enddatetime 和 roomKey 列。我想获取大于给定日期时间的 roomKey....
我的控制器中有两个操作,formAction()和sendOrderAction()。后者应该处理一个域对象 Order,该对象在提交 formAction 时进行验证。这按预期工作......
TYPO3 Extbase - 无法通过typnum渲染json
TYPO3 Extbase - 无法通过typnum渲染json 在列表/编辑/新建/删除操作(有效)旁边,我尝试以 json 形式呈现输出。但没有值呈现。如果我做一个简单的... $数据 = 数组(...