- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法在 Extbase 扩展中创建 AJAX 调用而不使用页面 typeNum?
最佳答案
编辑:
Helmut Hummel,TYPO3 CMS 团队成员,measured将 EID 与 Extbase 结合使用比使用 typeNum 方法慢。但由于typeNum方式配置比较麻烦,所以他开发了第三种方式。
扩展名typoscript_rendering提供了一种无需额外配置即可直接调用 Extbase 操作的方法。它包含一个生成此类链接的 ViewHelper,并且可以在 Fluid 模板中像这样使用:
{namespace h=Helhum\TyposcriptRendering\ViewHelpers}
<script>
var getParticipationsUri = '<h:uri.ajaxAction controller="Participation" action="listByCompetition" arguments="{competition:competition}" />';
</script>
这会生成一个 URI,该 URI 调用我的“ParticipationController”的操作“listByCompetition”。您可以正常传递参数。
唯一的缺点是出于安全原因,扩展使用 cHash 来验证请求参数。 cHash 通过 GET 提交,但不能同时通过 GET 传递其他参数,因为这会使 cHash 无效。因此,如果您想在此类请求中传递表单数据,则需要混合使用 GET(用于有效的 AJAX 调用)和 POST(用于提交用户数据):
<script>
var createAddressUri = '<h:uri.ajaxAction controller="Address" action="create" />';
$body.on('submit', '#myForm', function(e) {
e.preventDefault();
emailAddress = $('#myForm').find('#email');
if (typeof(emailAddress) === 'string') {
$.ajax({
url: createAddressUri,
type: 'POST',
data: { 'tx_myext_pluginname[address][email]' : emailAddress},
success: function() {
// things to do on success
}
})
}
});
</script>
(当然这只是一个非常基本的例子。您可能会发布整个模型等)
EID方式:
是的,您可以使用 EID(扩展 ID)机制来实现这一点。没有官方声明应该使用哪种方式(pageType 或 eID)来进行 Extbase AJAX 调用,这似乎只是一个品味问题。
有一个很好的教程可以找到 here我将源代码复制到这里:
<?php
/** *************************************************************
*
* Extbase Dispatcher for Ajax Calls TYPO3 6.1 namespaces
*
* IMPORTANT Use this script only in Extensions with namespaces
*
* Klaus Heuer <klaus.heuer@t3-developer.com>
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
* ************************************************************* */
/** ************************************************************
* Usage of this script:
*
* - Copy this script in your Extension Dir in the Folder Classes
* - Set the Vendor and Extension Name in Line 82 + 83
* - Include the next line in the ext_localconf.php, change the ext name!
* - $TYPO3_CONF_VARS['FE']['eID_include']['ajaxDispatcher'] = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('myExtension').'Classes/EidDispatcher.php';
*
* Use for Ajax Calls in your jQuery Code:
*
* $('.jqAjax').click(function(e) {
* var uid = $(this).find('.uid').html();
* var storagePid = '11';
*
* $.ajax({
* async: 'true',
* url: 'index.php',
* type: 'POST',
*
* data: {
* eID: "ajaxDispatcher",
* request: {
* pluginName: 'patsystem',
* controller: 'Todo',
* action: 'findTodoByAjax',
* arguments: {
* 'uid': uid,
* 'storagePid': storagePid
* }
* }
* },
* dataType: "json",
*
* success: function(result) {
* console.log(result);
* },
* error: function(error) {
* console.log(error);
* }
* });
*************************************************************** */
/**
* Gets the Ajax Call Parameters
*/
$ajax = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('request');
/**
* Set Vendor and Extension Name
*
* Vendor Name like your Vendor Name in namespaces
* ExtensionName in upperCamelCase
*/
$ajax['vendor'] = 'T3Developer';
$ajax['extensionName'] = 'ProjectsAndTasks';
/**
* @var $TSFE \TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController
*/
$TSFE = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController', $TYPO3_CONF_VARS, 0, 0);
\TYPO3\CMS\Frontend\Utility\EidUtility::initLanguage();
// Get FE User Information
$TSFE->initFEuser();
// Important: no Cache for Ajax stuff
$TSFE->set_no_cache();
//$TSFE->checkAlternativCoreMethods();
$TSFE->checkAlternativeIdMethods();
$TSFE->determineId();
$TSFE->initTemplate();
$TSFE->getConfigArray();
\TYPO3\CMS\Core\Core\Bootstrap::getInstance()->loadConfigurationAndInitialize();
$TSFE->cObj = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer');
$TSFE->settingLanguage();
$TSFE->settingLocale();
/**
* Initialize Database
*/
\TYPO3\CMS\Frontend\Utility\EidUtility::connectDB();
/**
* @var $objectManager \TYPO3\CMS\Extbase\Object\ObjectManager
*/
$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\Object\ObjectManager');
/**
* Initialize Extbase bootstap
*/
$bootstrapConf['extensionName'] = $ajax['extensionName'];
$bootstrapConf['pluginName'] = $ajax['pluginName'];
$bootstrap = new TYPO3\CMS\Extbase\Core\Bootstrap();
$bootstrap->initialize($bootstrapConf);
$bootstrap->cObj = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('tslib_cObj');
/**
* Build the request
*/
$request = $objectManager->get('TYPO3\CMS\Extbase\Mvc\Request');
$request->setControllerVendorName($ajax['vendor']);
$request->setcontrollerExtensionName($ajax['extensionName']);
$request->setPluginName($ajax['pluginName']);
$request->setControllerName($ajax['controller']);
$request->setControllerActionName($ajax['action']);
$request->setArguments($ajax['arguments']);
$response = $objectManager->create('TYPO3\CMS\Extbase\Mvc\ResponseInterface');
$dispatcher = $objectManager->get('TYPO3\CMS\Extbase\Mvc\Dispatcher');
$dispatcher->dispatch($request, $response);
echo $response->getContent();
//die();
?>
查看“此脚本的用法”部分,其中解释了如何注册 eID。该脚本适用于 TYPO3 6.1 及更高版本。
关于Typo3 Extbase AJAX 没有页面 typenum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21139769/
考虑这两个程序及其尝试编译。 #include int main() { std::vector a; // Errors centered around `Typo` being an i
如何才能检测到拼写错误,但仅限于特定短语。另一种思考方式是如何检测某个正则表达式的拼写错误。 例如,我不想要一个通用的拼写错误查找器,我在上面找到了多个资源。我不想要一个通用的拼写检查器,我又在上面找
我现在正在研究算法,我遇到过一个例子,我的回答是 Infinite loop但在正确答案中,它说它是 O(log2n) . function someFunc(n) { for(var i =
IntelliJ IDEA 具有检查拼写的功能。在分析概述中,我可以看到发现了多少拼写错误,例如发现 12 个拼写错误。在代码中,它们使用绿色波浪线突出显示。 但是,我发现手动查找那些波浪线非常困难。
我是 still通过“七周内的七种语言”,我发现了一个错字或我不明白的东西。 挑战之一是: Write a function that takes an argument x and returns
我正在从 Jquery 调用 WCF Rest 服务,如下所示。在我的 WCF Rest 服务中,安全模式是传输。下面的代码返回“访问被拒绝”错误。 function GetRest
引用自 Resources Documentation 的 smallestWidth 部分安卓: Thus, the value you use should be the actual small
IntelliJ IDEA 具有检查拼写的检查功能。在分析概览中,我可以看到发现了多少拼写错误,例如发现 12 个拼写错误。在代码中,它们使用绿色波浪线突出显示。 但是,我发现手动查找那些波浪线非常困
当命名变量或提供字符串参数时,Android Studio 似乎对我如何标记事物有问题。 有没有办法关闭它? 最佳答案 是的,打开 Preferences -> Editor -> Inspectio
我已将数据添加到 solr。 名称字段值为:“batman”、“bat man”、“bat-man” 因此,如果用户搜索“btman”,结果应显示搜索中的所有上述值。 我发现这样的查询:localho
use YAML::XS; local $YAML::XS::DumpCode=1; ... 我收到警告: Name "YAML::XS::DumpCode" used only once: poss
我在 react native 应用程序中遇到了 eslint 的问题。我正在为我的组件声明样式属性。它看起来像: Component.propTypes = { styles: ViewPro
我的一个函数加密一个字符串,我的一个测试验证它发生了。自然,像 sldjf982389 这样的字符串不被识别为有效的英语单词,所以 IntelliJ提示。 如果有办法在不向字典中添加垃圾的情况下抑制这
我在云托管中托管了一个 wordpress 网站。我注意到 apache error_log 文件大小增长得非常快,我发现了这个错误(Kirki: Typo found in field post_t
我经常被指向错误博客引擎的来源,即 http://typosphere.org/stable.tar.gz但是,如果我下载并执行以下操作:捆绑安装等。它会作为单独的引擎运行。 我尝试将拼写错误安装为
我正在使用 cakePHP 创建待办事项应用程序。 CakePHP 会为您创建查询等。这就是为什么不能出现拼写错误的原因。 错误: Error: SQLSTATE[42S22]: Column not
我有一个脚本,它列出了特定目录中可能的文件。该代码工作正常,但如何避免此警告? #!/usr/bin/perl use strict; use warnings; use autodie; my $l
在Lua网站上https://www.lua.org/pil/16.1.html ,有这段代码 function Account:new (o) o = o or {} -- create o
在我的 Gruntfile.js 中,我将咖啡任务配置为如此,并且 src/ 目录中存在一个文件 script.coffee: coffee: { dist: { files:
我的问题是关于行(编辑:19),其中新的 PrintWriter 是使用将 FileWriter fw 作为参数的构造函数创建的。如果稍后在实际写作中不使用,我不明白将 BufferedWriter
我是一名优秀的程序员,十分优秀!