Don't forget that you have had a dream

    

TYPO3中便捷操作

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

跳转到Action

  • redirect
  • forward
  • 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' = ''(其他参数)
 );
  • 调用
  • 返回值
  • 代码
 /**
  * 构成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 页面跳转

  • 请求内部重定向到另一控制器
  • 外部HTTP重定向到另一控制器
  • 重定向至指定url
  • 发送HTTP状态码
  • 在系统setup中引入通知所需的css,js文件,本人修改时使用 UIkit 的通知组件,组件下载地址:http://www.getuikit.net/download/uikit-2.25.0.zip
  • 按照以下路径找到文件
  • 找到文件后,修改以下函数 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]

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

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

  • 获取当前扩展名称:$this->request->getPluginName()
  • 获取当前控制器名称:$this->request->getControllerName()
  • 获取当前Action名称:$this->request->getControllerActionName()
    如下图,在下图显示的项中,使用get方法即可获得 get后第一个字母大写:

https://file.whongbin.com/blog/img20190430152017.png

您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站部分内容收集于互联网,如果有侵权内容、不妥之处,请联系我们删除。敬请谅解!
所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 知识共享许可协议 进行许可。

评论已关闭

  更新日志

博客banner下方滚动文字替换为使用 一言API 随机获取 --- updated on 2019-05-22 09:04:31 星期三

  关于博主

三里林,一个致力于分享,分享心得,分享技术,分享知识点的个人博客

  近期评论

  分类目录

女人应该像水一样的,什么样的地方都能淌得过去啊。

谁能让我开心,我就喜欢谁

最孤独的人最亲切,受过伤的人总是笑的最灿烂。

impossible的完整形式是i'm possible

人只有在害怕的时候才会变勇敢。

与其诅咒黑暗,不如点亮烛光

弱小和无知,不是生存的障碍,傲慢才是。

人的欲望永无止境,就像我一开始,也只是想知道你的名字。