TYPO3中便捷操作

原文链接:https://www.whongbin.cn/index/article/detail/id/35.html

https://qiniu.whongbin.cn/87826201809101414311730.jpg

分享下TYPO3中的一些便捷操作

以下分享的一些便捷操作可以说都是干货了,有二次开发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]

2018-10-09 更新

typo3中ViewHelper的书写示例

#InListViewHelper.php

 * {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();
        }
    }
}

2018-10-15 更新

你可能感兴趣的:(TYPO3中便捷操作)