pdf模板中变量的SuiteCRM渲染格式(如日期)

SuiteCRM rendering format of variable in pdf template (like date)

在 SuiteCRM-7.8.13 上

我找不到关于 question, like the one in this link, 关于在搜索引擎和 SO 上 PDF 模板中变量的呈现格式的任何答案。你会在这里找到我的调查结果。

未按照我的需要格式化的 PDF 模板字段,其中包括日期。

var $aos_quotes_date_entered 的 PDF 模板上的渲染是 month/day/year + am/pm 风格的时间。

我只是希望日期顺序 day/month/year 符合我需要的法式风格。

我深入研究了代码并找到了修改它的地方。

它并不干净,只是一个提示,但可能会帮助其他人(并节省他们的时间)

在文件中:[SuiteCRM-7.8.13 folder]\modules\AOS_PDF_Templates\templateParser.php

class(我会把class的代码注释掉,指出哪里看):

class templateParser {
    static function parse_template($string, $bean_arr) {
        //no comment on that function
    }

    function parse_template_bean($string, $key, &$focus){
        //some code


        foreach ($focus->field_defs as $field_def) {
           // some code in the loop
        }

        //some code


        //this is the loop where you can catch the var $aos_quotes_date_entered and alter its value
        foreach ($repl_arr as $name => $value) {
          //several check are done on some var

            //add your own check on the $name and alter the value as you wish it to appear on the pdf generated document
            if($name === 'aos_quotes_date_entered'){
                 $value = [alter the date with correct format]
           }

        }

   }

}

这将是一个升级不安全的更改。 TemplateParsing 是一个需要大量关注的领域,它缺少基本的东西,比如你想做什么 + this or this

当我需要一种与存储在数据库中的内容不同的格式以及当我有自定义 sugarFields 时,我就是这样做的

1 创建一个新的文本字段(例如本例中的 date_entered_french_format_c),就像解释的那样 in this video

注意: 新的文本字段不会改变数据库 table(aos_quote 在这种情况下),而是在 table fields_meta_dataaos_quote 中与元组相关的字段 date_entered_french_format_c 的值将存储 aos_quotes_cstm<module>_cstm 以使其对其他模块通用).

2 在 aos_quotes 中创建一个 after_save logic_hook(3 个步骤):

这里是创建模块逻辑钩子的参考文档 SugarCRM CE Docs

第 1 步:[suitecrm folder]/custom/Extension/modules/AOS_Quotes/Ext/LogicHooks/after_save_logic_hooks.php:

  <?php

    $hook_array['after_save'] = Array();
    $hook_array['after_save'][] = Array(1, 'after save', 'custom/modules/AOS_Quotes/AOSQuotesAfterSaveClass.php','AOSQuotesAfterSaveClass','after_save_method');
    

    ?>

步骤 #2: 解析您的日期字段并根据需要设置格式

[suitecrm folder]/custom/modules/AOS_Quotes/AOSQuotesAfterSaveClass.php中:

<?php

    if (!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');

    class AOSQuotesAfterSaveClass
    {
        function after_save_method($bean, $event, $arguments)
        {
            //logic
            $date_entered = (empty($bean->fetched_row['id']))?((new \DateTime())->format('Y-m-d H:i:s')):$bean->fetched_row['date_entered'];
            $date_entered_as_date = DateTime::createFromFormat('Y-m-d H:i:s',$date_entered);
            $date_format_to_french = $date_entered_as_date->format('d-m-Y');
            $bean->date_entered_french_format_c = $date_format_to_french;
            $bean->save();

        }
    }

?>

步骤 #3: 进行修复重建 like explained here

3 包含新字段而不是默认字段(date_entered_french_format_c 可用于您的 PDF 模板)