热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TYPO3中便捷操作

以下分享的一些便捷操作可以说都是干货了,有二次开发typo3的小伙伴可以省去不少google的时间[aru_36],这篇文章会持续更新,这段时间工作比较忙,有时间再写[aru_14

以下分享的一些便捷操作可以说都是干货了,有二次开发typo3的小伙伴可以省去不少google的时间 [aru_36],这篇文章会持续更新,这段时间工作比较忙,有时间再写 [aru_147]


最方便的debug



  • php中输出到页面:\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($nowDate);

//输出对象查询的SQL语句
$queryParser = $this->objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\Storage\Typo3DbQueryParser::class);
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($queryParser->convertQueryToDoctrineQueryBuilder($query)->getSQL());


  • 页面中输出PHP传递的变量:{_all}


{data}
{_all}

在PHP中拼接符合typo3规则的URL链接



  • 参数说明:

$uParams = array(
array(
'tx_areas_area' = array(
'action' = 'yourActionName',
'controller' = 'yourControllerName',
'plugin' = 'yourPluginName',
'moreParams' = 其他参数
)
)

-参数说明:

$uCOnfs= array(
'useCacheHash' = 1,(0或1)
'no_cache' = 0,(0或1)
'parameter' = 168,(pageUID)
'moreParams' = ''(其他参数)
);


  • 调用

$objUrl = $this-createTypo3LinkUrl($uParams,$uConfs);


  • 返回值

string 'areas/?tx_areas_area%5Baction%5D=action&tx_areas_area%5Bcontroller%5D=controller&tx_areas_area%5Bplugin%5D=plugin&tx_areas_area%5BmoreParams%5D=252&cHash=8aa773ad881f38fc0a78d7dc80bb1be4'


  • 代码

/**
* 构成typo3的链接
* createTypo3LinkUrl
*/
private function createTypo3LinkUrl($uParams,$uConfs){
$cOnf=array();
$conf['useCacheHash'] = $uConfs['useCacheHash'];
$conf['no_cache'] = $uConfs['no_cache'];
$conf['parameter'] = $uConfs['parameter'];
$conf['additionalParams'] = GeneralUtility::implodeArrayForUrl('', $uParams, '', TRUE).$uConfs['moreParams'];

$cObj = GeneralUtility::makeInstance('TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer');
$cObj-typoLink('|', $conf);
$url = $cObj->lastTypoLinkUrl;
return $url;
}

typo3 页面跳转



  • 请求内部重定向到另一控制器

$this->forward($actionName, $controllerName, $extensionName, array $arguments);


  • 外部HTTP重定向到另一控制器

$this->redirect($actionName, $controllerName, $extensionName, array $arguments, $pageUid, $delay = 0, $statusCode = 303);


  • 重定向至指定url

$this->redirectToURI($uri, $delay=0, $statusCode=303);


  • 发送HTTP状态码

$this->throwStatus($statusCode, $statusMessage, $content);

修改typo3中通知样式



  • 在系统setup中引入通知所需的css,js文件,本人修改时使用 UIkit 的通知组件,组件下载地址:http://www.getuikit.net/download/uikit-2.25.0.zip

  • 按照以下路径找到文件

\var\www\html\domain\typo3\sysext\core\Classes\Messaging\Renderer\ListRenderer.php


  • 找到文件后,修改以下函数 getMessageAsMarkup()

/*将函数内容全部注释,方便以后修改*/
/**
* Gets the message rendered as clean and secure markup
*
* @param FlashMessage[] $flashMessages
* @return string
*/
protected function getMessageAsMarkup(array $flashMessages) : string
{
//源代码注释掉
/*$markup = [];
$script = [];
$markup[] = '

    ';
    foreach ($flashMessages as $flashMessage) {
    $messageTitle = $flashMessage->getTitle();
    $markup[] = '
  • ';
    if ($messageTitle !== '') {
    $markup[] = '

    ' . htmlspecialchars($messageTitle) . '

    ';
    }
    $markup[] = '

    ' . htmlspecialchars($flashMessage->getMessage()) . '

    ';
    $markup[] = '
  • ';
    }
    $markup[] = '
';
return implode('', $markup);*/
/*王宏彬于 2018-04-11 15:43修改*/
//重新写执行逻辑
$markup = [];
$markup[] = '';
return implode('', $markup);
}


  • 修改完上述函数后,测试通知,通知显示证明修改成功,若通知正常显示,但是样式错乱,如下图:

    Alt text




可检查上述文件中函数 getClass() 该函数中修改你的css样式class


/**
* Gets the message severity class name
*
* @param FlashMessage $flashMessage
*
* @return string The message severity class name
*/
protected function getClass(FlashMessage $flashMessage) : string
{
/*王宏彬于 2018-04-11 15:43修改*/
// return 'alert-' . self::$classes[$flashMessage->getSeverity()];
return self::$classes[$flashMessage->getSeverity()];
}


  • 修改后效果如下图:

    Alt text




再次运行检查,效果正常的话替换成功 [aru_51]



typo3中ViewHelper的书写示例

#InListViewHelper.php
namespace GeorgRinger\Theme\ViewHelpers;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractConditionViewHelper;
/**
* typo3的辅助方法,判断目标元素存在于集合
*
* = Examples =
*
*
* {theme:inList(list: '1,2', item:data.layout, then: 'someClass', else: '')}"
*

*
* 如果当前页的字段'布局'包含在1或2,则显示字符串'someClass'。
*

*/
class InListViewHelper extends AbstractConditionViewHelper {
/**
* 判断,如果目标元素存在于集合,返回 thenChild
* 不存在,返回 elseChild
*
* @param string $list 集合
* @param string $item 目标元素
* @return string
*/
public function render($list, $item) {
if (GeneralUtility::inList($list, $item)) {
return $this->renderThenChild();
} else {
return $this->renderElseChild();
}
}
}

在控制器中获取当前扩展信息



  • 获取当前扩展名称:$this->request->getPluginName()

  • 获取当前控制器名称:$this->request->getControllerName()

  • 获取当前Action名称:$this->request->getControllerActionName()

    如下图,在下图显示的项中,使用get方法即可获得 get后第一个字母大写:

    https://img8.php1.cn/3cdc5/18a53/882/b21c7e592992711e.png



推荐阅读
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • PHP反射API的功能和用途详解
    本文详细介绍了PHP反射API的功能和用途,包括动态获取信息和调用对象方法的功能,以及自动加载插件、生成文档、扩充PHP语言等用途。通过反射API,可以获取类的元数据,创建类的实例,调用方法,传递参数,动态调用类的静态方法等。PHP反射API是一种内建的OOP技术扩展,通过使用Reflection、ReflectionClass和ReflectionMethod等类,可以帮助我们分析其他类、接口、方法、属性和扩展。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • php缓存ri,浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
    thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法。本文是小编日常整理有关thinkp ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
author-avatar
jianyue1980_852
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有