SuiteCRM формат отображения переменной в шаблоне pdf (например, дата)

на SuiteCRM-7.8.13

Мне не удалось найти ответа на вопрос, как в этой ссылке, о формате отображения переменной в шаблоне PDF в поисковых системах и SO. Здесь вы найдете результат моего расследования.

Поля шаблонов PDF, которые не были отформатированы так, как мне нужно, и среди них дата.

Визуализация в шаблоне PDF переменной $aos_quotes_date_entered была месяц / день / год + время в стиле am / pm.

Я просто хотел, чтобы дата с датой заказа / месяцем / годом соответствовала нужному мне французскому стилю.

Я покопался в коде и нашел, где его изменить.

ЭТО НЕ ЧИСТО, ПРОСТО НАМЕК, НО МОЖЕТ ПОМОЧЬ ДРУГИМ (И ЭКОНОМИТЬ ИХ ВРЕМЯ)

В файле: [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]
           }

        }

   }

}

person nyluje    schedule 06.05.2018    source источник


Ответы (1)


Это изменение небезопасно для обновления. TemplateParsing - это область, требующая большого внимания, в ней отсутствуют базовые вещи, такие как то, что вы хотите сделать + это или это

Это то, что я делаю, когда мне нужен формат, отличный от того, что хранится в БД, а также когда у меня есть собственные сахарные поля.

1 создайте новое текстовое поле (например, date_entered_french_format_c в этом примере), как это объясняется в этом видео

NB: новое текстовое поле не изменит таблицу базы данных (aos_quote в этом случае), вместо этого текстовое поле определено в таблице fields_meta_data, а значения поля date_entered_french_format_c, относящиеся к кортежам в aos_quote, будут сохранены aos_quotes_cstm (<module>_cstm, чтобы сделать его общим для других модулей).

2 создайте логический крючок after_save в aos_quotes (3 шага):

Вот справочная документация по созданию логического хука модуля Документы SugarCRM CE

шаг №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: проанализируйте поля даты и отформатируйте их в соответствии с вашими потребностями.

in [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: Выполните ремонтное восстановление , как описано здесь.

3 включите новые поля вместо полей по умолчанию (date_entered_french_format_c можно использовать в вашем шаблоне PDF)

person mrbarletta    schedule 06.05.2018
comment
Я согласен с вами: это небезопасно для обновления. Предлагаемое вами решение кажется интересным для изучения. Не могли бы вы подробно рассказать, где искать в документации разработчика, чтобы выполнить эти шаги? Когда я смотрю на поисковую систему, у меня появляется идея, но я бы предпочел получить ваше подтверждение, чтобы просто прочитать о той части, которая мне нужна, а не полную документацию по suitecrm-sugarcrm. - person nyluje; 06.05.2018
comment
Только что отредактировал мой ответ, чтобы у вас была ссылка на документацию :) - person mrbarletta; 07.05.2018
comment
Где искать часть создания нового текстового поля? - person nyluje; 07.05.2018
comment
Это простая часть, перейдите в раздел «Администратор», найдите Studio, затем выберите модуль (aos_quotes), нажмите «Поля», а затем нажмите «Добавить поле». Остальное - просто название поля и тип (текст) - person mrbarletta; 07.05.2018