SuiteCRM在pdf模板中呈现变量格式(如日期)

时间:2018-05-06 10:13:58

标签: suitecrm

SuiteCRM-7.8.13上的

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

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

var $aos_quotes_date_entered的PDF模板上的呈现是月/日/年+上午/下午样式的时间。

我只想要订单日/月/年的日期与我需要的法国风格相匹配。

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

它不干净,只是一个提示,但可能会帮助其他人(并保存它们)

在档案中:[SuiteCRM-7.8.13 folder]\modules\AOS_PDF_Templates\templateParser.php

该课程(我将评论该课程的代码以指出在哪里寻找):

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]
           }

        }

   }

}

1 个答案:

答案 0 :(得分:1)

这将是一个不升级安全的变化。 TemplateParsing是一个需要大量关注的领域,它缺少像你想要做的基本内容+ thisthis

当我需要一个与DB中存储的内容不同的格式时,以及当我有自定义的sugarFields时,我就会这样做

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

一样

NB:新文本字段不会改变数据库表(在这种情况下为aos_quote),而是在表fields_meta_data中定义文本字段并且值为与date_entered_french_format_c中的元组相关的字段aos_quote将存储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模板)