TYPO3中便捷操作

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

分享下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传递的变量:<f:debug>{_all}</f:debug>
<!-- 输出变量{_all}代表所有变量 -->
<f:debug>{data}</f:debug>
<f:debug>{_all}</f:debug>

在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中通知样式

\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[] = '<ul class="typo3-messages whbedit">';
          foreach ($flashMessages as $flashMessage) {
              $messageTitle = $flashMessage->getTitle();
              $markup[] = '<li class="alert ' . htmlspecialchars($this->getClass($flashMessage)) . '">';
              if ($messageTitle !== '') {
                  $markup[] = '<h4 class="alert-title">' . htmlspecialchars($messageTitle) . '</h4>';
              }
              $markup[] = '<p class="alert-message">' . htmlspecialchars($flashMessage->getMessage()) . '</p>';
              $markup[] = '</li>';
          }
          $markup[] = '</ul>';
          return implode('', $markup);*/

      /*王宏彬于 2018-04-11 15:43修改*/
      //重新写执行逻辑
      $markup = [];
      $markup[] = '<script>';
      $markup[] = '$(function(){';
      foreach ($flashMessages as $flashMessage) {
          $messageTitle = $flashMessage->getTitle();
          if ($messageTitle !== '') {
              # your code
          }
          $markup[] = "UIkit.notify({message:'" . htmlspecialchars($flashMessage->getMessage()) . "', status:'".htmlspecialchars($this->getClass($flashMessage))."', timeout:500, pos:'top-center'});";
      }
      $markup[] = '});';
      $markup[] = '</script>';
      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
<?php
namespace GeorgRinger\Theme\ViewHelpers;

use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractConditionViewHelper;

/**
 * typo3的辅助方法,判断目标元素存在于集合
 *
 * = Examples =
 *
 * <code title="Basic usage">
 * {theme:inList(list: '1,2', item:data.layout, then: 'someClass', else: '')}"
 * </code>
 * <output>
 * 如果当前页的字段'布局'包含在1或2,则显示字符串'someClass'。
 * </output>
 */
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 更新

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270