5

是否可以通过 TypoScript 自动生成混合的数字和字母字符串,例如12A54或类似的东西?

4

3 回答 3

7

我更喜欢 userFunc 到 php 包含脚本。例如,您可以将参数传递给用户函数。

排版:

includeLibs.generateInvoiceNo= fileadmin/scripts/generateInvoiceNo.php
temp.invoiceNo = USER
temp.invoiceNo {
  userFunc =user_generateInvoiceNo->main
}

PHP:
文件管理/脚本/generateInvoiceNo.php

<?
class user_generateInvoiceNo {
    var $cObj;// The backReference to the mother cObj object set at call time
    /**
    * Call it from a USER cObject with 'userFunc = user_generateInvoiceNo->main'
    */
    function main($content,$conf){
        $length = 6;
        $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        $number=substr(str_shuffle($chars),0,$length);
        return $number;
    }
}
?>

学分:

于 2012-10-21T13:36:44.320 回答
5

如前所述,Typoscript 中没有这样的功能,因此首选方法是使用其他答案中建议的一些简单的 PHP 函数。

但是,有一个作弊方法,那就是使用 MySQL。请注意,只有当您绝对不能(出于我真的想不到的原因)编写一段自定义 PHP 时,它才是一个解决方案。把它当作一个学术答案而不是一个实际答案。

temp.random = CONTENT
temp.random {
  table = tt_content
  select {
    pidInList = 1
    recursive = 99
    max = 1
    selectFields = SUBSTRING(MD5(RAND()) FROM 1 FOR 6) AS random_string
  }
  renderObj = TEXT
  renderObj {
    field = random_string
    case = upper
  }
}

笔记:

  1. pidInList必须指向现有页面。
  2. MySQL 命令实际上只是一个示例,因为字符串永远不会包含字母 GZ。我确信有可能想出一个由 MySQL 生成的更好的字符串。
于 2012-10-19T12:33:07.220 回答
3

为这样简单的任务修补 TYPO3 源是错误的想法。在下一次源升级后,您将丢失所做的更改。

相反,最好包含一个简单的 PHP 脚本,您可以在其中呈现您需要的内容检查 TSREF

于 2012-10-19T11:45:34.367 回答