Формат визуализации переменной SuiteCRM в шаблоне pdf (например, дата) - PullRequest
0 голосов
/ 06 мая 2018

на SuiteCRM-7.8.13

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

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

Рендеринг в шаблоне PDF для var $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]
           }

        }

   }

}

1 Ответ

0 голосов
/ 06 мая 2018

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

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

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 logic_hook в 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)

...