Good practice on how to set up routeEnhancers for list and detail view of ext:news?

前端 未结 3 1395
生来不讨喜
生来不讨喜 2020-12-20 00:41

Precondition

The ext:news list view plugin is on page www.domain.com/news [ID 9] and the detail view on www.domain.com/article [ID 39].

Following the offi

3条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-20 01:29

    Here is a copy of the YAML configuration created by Georg Ringer:

    site_config.yaml

    Version by Georg Ringer

    rootPageId: 1
    base: 'http://t3-master.vm/'
    languages:
      -
        title: German
        enabled: true
        languageId: '0'
        base: /
        typo3Language: de
        locale: de
        iso-639-1: de
        navigationTitle: DE
        hreflang: ''
        direction: ltr
        flag: de
        googleAnalyticsReportClientId: xxx
        googleAnalyticsReportSiteId: yyyy
      -
        languageId: '1'
        title: English
        siteTitle: ''
        navigationTitle: English
        base: /en/
        locale: en
        iso-639-1: en
        hreflang: en
        direction: ''
        typo3Language: default
        flag: gb
        fallbackType: strict
    errorHandling: {  }
    baseVariants: {  }
    xxxx: "as\r\ndas\"\r\nas"
    routes: {  }
    googleTagManager: ''
    logo: ''
    googleAnalyticsReportClientId: 778798369619-fl4nav20thdvfv2hag2lntf2cg1o2d79.apps.googleusercontent.com
    googleAnalyticsReportSiteId: 'ga:136091502'
    routeEnhancers:
      NewsPlugin:
        type: Extbase
        limitToPages:
          - 25
        extension: News
        plugin: Pi1
        routes:
          -
            routePath: '/{news_title}'
            _controller: 'News::detail'
            _arguments:
              news_title: news
          -
            routePath: '/page/{page}'
            _controller: 'News::list'
            _arguments:
              page: '@widget_0/currentPage'
          -
            routePath: '/time/{year}-{month}'
            _controller: 'News::list'
            _arguments:
              year: overwriteDemand/year
              month: overwriteDemand/month
          -
            routePath: '/category/{category}'
            _controller: 'News::list'
            _arguments:
              category: overwriteDemand/categories
        defaultController: 'News::list'
        defaults:
          page: '0'
          year: ''
          month: ''
        requirements:
          news_title: '^[a-zA-Z0-9].*$'
          page: \d+
        aspects:
          news_title:
            type: PersistedAliasMapper
            tableName: tx_news_domain_model_news
            routeFieldName: path_segment
          page:
            type: StaticRangeMapper
            start: '1'
            end: '100'
          year:
            type: StaticRangeMapper
            start: '1970'
            end: '2020'
          month:
            type: StaticValueMapper
            map:
              january: '01'
              february: '02'
              march: '03'
              april: '04'
              may: '05'
              june: '06'
              july: '07'
              august: '08'
              september: '09'
              october: 10
              november: 11
              december: 12
          category:
            type: PersistedPatternMapper
            tableName: sys_category
            routeFieldPattern: '^(?P.+)-(?P<uid>\d+)$'
            routeFieldResult: '{title}-{uid}'
    </code></pre>
    
    <h2>My Version</h2>
    
    <p>With the following Changes:</p>
    
    <ul>
    <li>Added a trailing slash, to better match the old RealURL configuration</li>
    <li>Additions for multilanguage </li>
    <li>Removed ID from detail generation</li>
    <li>Removed ID from category generation</li>
    <li>Removed /page/ from the pagination example</li>
    <li>Removed /time/ from the date example</li>
    <li>Changed Year End from '2020' to '2099'</li>
    <li>Overall structural improvements.</li>
    </ul>
    
    <pre><code>routeEnhancers:
        PageTypeSuffix:
          type: PageType
          default: '/'
          index: '/'
          map:
            '/': 0
        NewsPlugin:
            type: Extbase
            extension: News
            plugin: Pi1
            limitToPages: [33,59]
            routes:
              # Detail view:
              - routePath: '/{news_title}'
                _controller: 'News::detail'
                _arguments: {'news_title': 'news'}
              # Categories:
              - routePath: '/{category}'
                _controller: 'News::list'
                _arguments: {'category': 'overwriteDemand/categories'}
              # Tags:
              - routePath: '/{tag_name}'
                _controller: 'News::list'
                _arguments: {'tag_name': 'overwriteDemand/tags'}    
              # Pagination:
              - routePath: '/{page}'
                _controller: 'News::list'
                _arguments: {'page': '@widget_0/currentPage'}
              # Archive:
              - routePath: '/{localized_archive}/{year}/{month}'
                _controller: 'News::archive'
              # Date:
              - routePath: '/{year}-{month}'
                _controller: 'News::list'
                _arguments:
                  year: overwriteDemand/year
                  month: overwriteDemand/month
            defaultController: 'News::list'
            defaults:
                page: '0'
                year: ''
                month: ''           
            requirements:
                page: '\d+'
                news_title: '^[a-zA-Z0-9].*$'
            aspects:
                page:
                    type: StaticRangeMapper
                    start: '1'
                    end: '100'
                news_title:
                    type: PersistedPatternMapper
                    tableName: tx_news_domain_model_news
                    routeFieldPattern: '^(?P<path_segment>.+)$'
                    routeFieldResult: '{path_segment}'
                category:
                    type: PersistedAliasMapper
                    tableName: 'sys_category'
                    routeFieldName: 'title'
                tag_name:
                    type: PersistedAliasMapper
                    tableName: 'tx_news_domain_model_tag'
                    routeFieldName: 'title'
                localized_archive:
                    type: LocaleModifier
                    default: 'archive'
                    routeFieldName: 'title'
                    localeMap:
                      - languageId: 'de_.*'
                        value: 'archiv'
                      - languageId: 'fr_.*'
                        value: 'archives'
                year:
                    type: StaticRangeMapper
                    start: '1970'
                    end: '2099'
                month:
                    type: StaticValueMapper
                    map:
                      january: '01'
                      february: '02'
                      march: '03'
                      april: '04'
                      may: '05'
                      june: '06'
                      july: '07'
                      august: '08'
                      september: '09'
                      october: 10
                      november: 11
                      december: 12
                    localeMap:
                      - locale: 'de_.*'
                        map:
                          januar: '01'
                          februar: '02'
                          maerz: '03'
                          april: '04'
                          mai: '05'
                          juni: '06'
                          juli: '07'
                          august: '08'
                          september: '09'
                          oktober: 10
                          november: 11
                          dezember: 12
                      - locale: 'fr_.*'
                        map:
                          janvier: '01'
                          février: '02'
                          mars: '03'
                          avril: '04'
                          mai: '05'
                          juin: '06'
                          juillet: '07'
                          aout: '08'
                          septembre: '09'
                          octobre: 10
                          novembre: 11
                          décembre: 12
    </code></pre>
        </p>
                 <div class="appendcontent">
                                                            </div>
                </div>
                <div class="jieda-reply">
                  <span class="jieda-zan button_agree" type="zan" data-id='1312314'>
                    <i class="iconfont icon-zan"></i>
                    <em>0</em>
                  </span>
                       <span type="reply" class="showpinglun" data-id="1312314">
                    <i class="iconfont icon-svgmoban53"></i>
                   讨论(0)
                  </span>
                                                      
                  
                  <div class="jieda-admin">
                              
                 
           
              
                  </div>
                                           <div class="noreplaytext bb">
    <center><div>   <a href="https://www.e-learn.cn/qa/q-478017.html">  查看其它3个回答
    </a>
    </div></center>
    </div>            </div>
                             <div class="comments-mod "  style="display: none; float:none;padding-top:10px;" id="comment_1312314">
                        <div class="areabox clearfix">
    
    <form class="layui-form" action="">
                   
                <div class="layui-form-item">
        <label class="layui-form-label" style="padding-left:0px;width:60px;">发布评论:</label>
        <div class="layui-input-block" style="margin-left:90px;">
             <input type="text" placeholder="不少于5个字" AUTOCOMPLETE="off" class="comment-input layui-input" name="content" />
                            <input type='hidden' value='0' name='replyauthor' />
        </div>
        <div class="mar-t10"><span class="fr layui-btn layui-btn-sm addhuidapinglun" data-id="1312314">提交评论 </span></div>
      </div>
      
    </form>
                        </div>
                        <hr>
                        <ul class="my-comments-list nav">
                            <li class="loading">
                            <img src='https://www.e-learn.cn/qa/static/css/default/loading.gif' align='absmiddle' />
                             加载中...
                            </li>
                        </ul>
                    </div>
              </li>
                                  			
            </ul>
            
            <div class="layui-form layui-form-pane">
              <form id="huidaform"  name="answerForm"  method="post">
                
                <div class="layui-form-item layui-form-text">
                  <a name="comment"></a>
                  <div class="layui-input-block">
                
        
    <script type="text/javascript" src="https://www.e-learn.cn/qa/static/js/neweditor/ueditor.config.js"></script>
    <script type="text/javascript" src="https://www.e-learn.cn/qa/static/js/neweditor/ueditor.all.js"></script>
    <script type="text/plain" id="editor"  name="content"  style="width:100%;height:200px;"></script>                                 
    <script type="text/javascript">
                                     var isueditor=1;
                var editor = UE.getEditor('editor',{
                    //这里可以选择自己需要的工具按钮名称,此处仅选择如下五个
                    toolbars:[['source','fullscreen',  '|', 'undo', 'redo', '|', 'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', 'cleardoc', '|', 'rowspacingtop', 'rowspacingbottom', 'lineheight', '|', 'customstyle', 'paragraph', 'fontfamily', 'fontsize', '|', 'indent', '|', 'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'link', 'unlink', 'anchor', '|', 'simpleupload', 'insertimage', 'scrawl', 'insertvideo', 'attachment', 'map', 'insertcode', '|', 'horizontal', '|', 'preview', 'searchreplace', 'drafts']],
                
                    initialContent:'',
                    //关闭字数统计
                    wordCount:false,
                    zIndex:2,
                    //关闭elementPath
                    elementPathEnabled:false,
                    //默认的编辑区域高度
                    initialFrameHeight:250
                    //更多其他参数,请参考ueditor.config.js中的配置项
                    //更多其他参数,请参考ueditor.config.js中的配置项
                });
                            editor.ready(function() {
                	editor.setDisabled();
                	});
                                $("#editor").find("*").css("max-width","362px");
            </script>              </div>
                </div>
                              
        
    
            
             <div class="layui-form-item">
                    <label for="L_vercode" class="layui-form-label">验证码</label>
                    <div class="layui-input-inline">
                      <input type="text"  id="code" name="code"   value="" required lay-verify="required" placeholder="图片验证码" autocomplete="off" class="layui-input">
                    </div>
                    <div class="layui-form-mid">
                      <span style="color: #c00;"><img class="hand" src="https://www.e-learn.cn/qa/user/code.html" onclick="javascript:updatecode();" id="verifycode"><a class="changecode"  href="javascript:updatecode();"> 看不清?</a></span>
                    </div>
                  </div>
                                      <div class="layui-form-item">
                        <input type="hidden" value="478017" id="ans_qid" name="qid">
       <input type="hidden" id="tokenkey" name="tokenkey" value=''/>
                    <input type="hidden" value="Good practice on how to set up routeEnhancers for list and detail view of ext:news?" id="ans_title" name="title"> 
                 
                  <div class="layui-btn    layui-btn-disabled"  id="ajaxsubmitasnwer" >提交回复</div>
                </div>
              </form>
            </div>
          </div>
          <input type="hidden" value="478017" id="adopt_qid"	name="qid" /> 
          <input type="hidden" id="adopt_answer" value="0"	name="aid" />
        </div>
        <div class="layui-col-md4">
              
     <!-- 热门讨论问题 -->
         
     <dl class="fly-panel fly-list-one">
            <dt class="fly-panel-title">热议问题</dt>
                <!-- 本周热门讨论问题显示10条-->