2012-02-21 15 views
4

私はTypo3 4.5.3を使用しています。現在のページに表示するディレクトリをランダムに選択したいディレクトリに画像ファイルがありますが、typoscriptを取得してlistnum = randを作成することはできません。私の拡張テンプレートは次のとおりです:typoscriptを使用してディレクトリ内のファイルからランダムなイメージを選択する方法は?

# Pick a random image to display 
temp.banner = IMAGE 
temp.banner { 
    file { 
    height = 165 
    width = 954 
    import { 
     filelist = {$templatePathPrefix}images/banners | jpg,jpeg,png,gif | name | | 1 
     listNum = rand 
    } 
    } 
    params = class="bannerPic" 
} 

リストナンバーの設定を0,1などに変更すると、対応するimg HTMLがページに挿入されます。 'last'に設定すると動作しますが、rand 常には、何回更新しても最初の画像を挿入します。特定の画像(0,1、...)を選択できるので、私は一般的なセットアップの仕組みを知っています。ランダムな選択ではありません。

私は、外側のオブジェクトをCOA_INTオブジェクトでラップするrandのさまざまな用途でTSを見ましたが、それは私にとってはうまくいきませんでした。私はlistNum = randをどこに置くべきかについて何か迷っていましたか?私はTypo3でかなり新しくなっていますので、この時点ではまだかなり不透明です(または、それは表示されますか?)。あなたが提供できるどんな洞察にも感謝します。

答えて

2

mak_stdwrapextended extensionは、listNumでrandを使用する可能性を追加します。

4.5でもうまく機能します。

1

TypoScriptでランダムに選択することはお勧めしません。ページをロードするたびにランダムなイメージが必要なので、ランダム要素はUSER_INTまたはCOA_INT要素でなければならず、したがってキャッシュ可能ではありません。

これはJavaScriptを使用して簡単に解決できます。クライアントでJavaScriptが利用できない場合はデフォルトイメージを定義し、イメージをランダムに選択するJavaScriptを定義します。このソリューションでは、毎回ランダムなイメージが得られ、コンテンツは完全にキャッシュ可能です。

以下のTypoScriptコードは、あなたにこれを促します。それは基本的に境界要素からイメージ要素を読み込み、それらをランダムに出力するJavaScriptを生成します。また、画像はリンク可能である。上記

lib.teaser = COA 
lib.teaser.10 = CONTENT 
lib.teaser.10 < styles.content.getBorder 
lib.teaser.10 { 
    slide = -1 
    table=tt_content 
    select{ 
     begin = 0 
     max = 1 
     #language 
     languageField=sys_language_uid 
     #from wich column 
     where=colPos=3 
    } 
    wrap=<div class="teaserimage">|</div> 

    renderObj=COA 

    #image with gallery function 
    renderObj.10 = COA 
    renderObj.10 { 
     stdWrap.required=1 
     # get image 
     10 = IMAGE 
     10 { 
      #if not empty 
      required=1 
      file.import=uploads/pics/ 
      file.import.field=image 
      #file.width=266 
      #file.height=180 
      file.import.listNum = 0 
      stdWrap.insertData=1 
      params = id="imgbig_{TSFE:currentRecord}" 
      imageLinkWrap < tt_content.image.20.1.imageLinkWrap 
      imageLinkWrap.typolink.ATagParams = id="link_imgbig_{TSFE:currentRecord}" 
      imageLinkWrap.typolink.ATagParams.stdWrap.insertData=1 
     } 

     # standard image configuration from tt_content 
     10.altText < tt_content.image.20.1.altText 
     10.titleText < tt_content.image.20.1.titleText 
     10.longdescURL < tt_content.image.20.1.longdescURL 

     # random function for gallery images 
     30 = COA 
     30 { 
      stdWrap.required=1 
      stdWrap.dataWrap(
      <script type="text/javascript"> 
      /* <![CDATA[ */ 
      var imgArray = new Array(|); 
      var randnum = Math.round(Math.random()*(imgArray.length-1)); 
      document.getElementById('imgbig_{TSFE:currentRecord}').src ='uploads/pics/' + imgArray[randnum]; 
      /* ]]> */ 
      </script> 
      ) 

      # first gallery image 
      10 = TEXT 
      10.field = image 
      10.listNum.splitChar=, 
      10.listNum=0 
      10.if.isTrue.field=image 
      10.if.isTrue.listNum=1 
      10.if.isTrue.listNum.splitChar=, 
      10.dataWrap = "|" 


      # other gallery images 
      20 = TEXT 
      20.field = image 
      20.split { 
       token = , 
       cObjNum = 1 
       1 = COA 
       1.if.isPositive.data = TSFE:register|SPLIT_COUNT 
       1 { 
        10 = TEXT 
        10.data = current:1 
        10.dataWrap = ,"|" 
       } 
      } 
     } 
     # random function for gallery links 
     40 = COA 
     40 { 
      stdWrap.required=1 
      stdWrap.dataWrap(
      <script type="text/javascript"> 
      /* <![CDATA[ */ 
      //var imgLinkArray = new Array(randnum); 
      var imgLinkArray = new Array(|); 
      if(document.getElementById('link_imgbig_{TSFE:currentRecord}')) document.getElementById('link_imgbig_{TSFE:currentRecord}').href = imgLinkArray[randnum]; 
      /* ]]> */ 
      </script> 
      ) 

      # first gallery link    
      10 = TEXT 
      10.field = image_link 
      10.listNum.splitChar=, 
      10.listNum=0 
      10.dataWrap = "|" 
      10.typolink.parameter.field = image_link 
      10.typolink.returnLast = url 

      # other gallery links 
      20 = TEXT 
      20.field = image_link 
      20.split { 
       token = , 
       cObjNum = 1 
       1 = COA 
       1.if.isPositive.data = TSFE:register|SPLIT_COUNT 
       1 { 
        10 = TEXT 
        10.data = current:1 
        10.dataWrap = ,"|" 
        10.typolink.parameter.data = current:1 
        10.typolink.returnLast = url 
       } 
      } 
     } 
    } 
} 
1

のみTYPO3 V4.6とは、コアでのListNum =ランドを持っている、あなたはtslib/class.tslib_content.php

を拡張する必要がTYPO3のV4.5のために、このhttp://forge.typo3.org/issues/16180

を見ます

$TYPO3_CONF_VARS['FE']['XCLASS']['tslib/class.tslib_content.php'] = PATH_site.'fileadmin/template/class.ux_tslib_content.php'; 

をしてclass.ux_tslib_content.phpためにこのコードを追加します:これはlocalconf.phpに追加

<?php 
/*************************************************************** 
* Copyright notice 
* 
* (c) 1999-2008 Kasper Skaarhoj ([email protected]) 
* All rights reserved 
* 
* This script is part of the TYPO3 project. The TYPO3 project is 
* free software; you can redistribute it and/or modify 
* it under the terms of the GNU General Public License as published by 
* the Free Software Foundation; either version 2 of the License, or 
* (at your option) any later version. 
* 
* The GNU General Public License can be found at 
* http://www.gnu.org/copyleft/gpl.html. 
* A copy is found in the textfile GPL.txt and important notices to the license 
* from the author is found in LICENSE.txt distributed with these scripts. 
* 
* 
* This script is distributed in the hope that it will be useful, 
* but WITHOUT ANY WARRANTY; without even the implied warranty of 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
* GNU General Public License for more details. 
* 
* This copyright notice MUST APPEAR in all copies of the script! 
***************************************************************/ 
/** 
* Contains classes for Content Rendering based on TypoScript Template configuration 
* 
* $Id: class.tslib_content.php 4254 2008-09-27 13:35:44Z dmitry $ 
* Revised for TYPO3 3.6 June/2003 by Kasper Skaarhoj 
* XHTML compliant 
* 
* class tslib_cObj   :  All main TypoScript features, rendering of content objects (cObjects). This class is the backbone of TypoScript Template rendering. 
* 
* @author Kasper Skaarhoj <[email protected]> 
*/ 

/** 
* This class contains all main TypoScript features. 
* This includes the rendering of TypoScript content objects (cObjects). 
* Is the backbone of TypoScript Template rendering. 
* 
* There are lots of functions you can use from your include-scripts. 
* The class "tslib_cObj" is normally instantiated and referred to as "cObj". 
* When you call your own PHP-code typically through a USER or USER_INT cObject then it is this class that instantiates the object and calls the main method. Before it does so it will set (if you are using classes) a reference to itself in the internal variable "cObj" of the object. Thus you can access all functions and data from this class by $this->cObj->... from within you classes written to be USER or USER_INT content objects. 
* 
* @author Kasper Skaarhoj <[email protected]> 
* @package TYPO3 
* @subpackage tslib 
* @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&cHash=4ad9d7acb4 
*/ 
class ux_tslib_cObj extends tslib_cObj{ 


    /** 
    * Exploding a string by the $char value (if integer its an ASCII value) and returning index $listNum 
    * 
    * @param string  String to explode 
    * @param string  Index-number. You can place the word "last" in it and it will be substituted with the pointer to the last value. You can use math operators like "+-/*" (passed to calc()) 
    * @param string  Either a string used to explode the content string or an integer value which will then be changed into a character, eg. "10" for a linebreak char. 
    * @return string 
    */ 
    function listNum($content,$listNum,$char) { 
     $char = $char ? $char : ','; 
     if (t3lib_div::testInt($char)) { 
      $char = chr($char); 
     } 
     $temp = explode($char,$content); 
     $last = ''.(count($temp)-1); 
     if($listNum === 'rand'){ $listNum = rand(0,count($temp)-1);} //taywa added: rand feature! 
     $index=$this->calc(str_ireplace('last',$last,$listNum)); 
     return $temp[$index]; 
    } 

} 


?> 
関連する問題