通过清单文件向editviewdefs.php添加面板

时间:2014-01-29 22:34:08

标签: sugarcrm

SugarCRM installable changes in detailview 有人询问如何添加面板,使用Module Installer的清单文件添加到现有模块的editview / detailview,而不会消除以前在自定义目录中进行的自定义。

答案是如何添加字段,而不是面板。

我知道你可以使用从清单文件中调用的post_execute函数来编辑中的editviewdefs.php和detailviewdefs.php文件。 /自定义/模块//元数据/ 目录,但这涉及对这些文件中已存在的内容进行一些猜测。

有没有人知道如何通过清单文件(或post_execute)添加面板,逐步添加面板,而不使用PHP代码手动编辑editviewdefs.php和detailviewdefs.php文件?

2 个答案:

答案 0 :(得分:1)

您正在使用ParserFactory类,该类可以在安装模块/包时执行的post_install或类似脚本中使用。我的理解是ParserFactory会调用自定义文件,如果它们存在,或者库存文件,如果没有,则适当安全地调整它们。

在模块的目录中,创建一个名为'scripts'的子目录,并创建包含单个函数post_install()的'post_install.php'。你的包目录看起来像这样:

~$ find .
/LICENSE.txt
/manifest.php
/scripts/post_install.php

您可以像这样使用ParserFactory:

<?php
function post_install(){

// $parser becomes an associative array for the metadata, similar to editviewdefs.php
require_once('modules/ModuleBuilder/parsers/ParserFactory.php');
$parser = ParserFactory::getParser('detailview', 'Accounts');

// finding the panels (which contain their fields), you can 
// now add fields or additional arrays to this array, creating new panels
// (you could manipulate $parser->_viewdefs directly, but I find this easier)
$panels = array_keys ( $parser->_viewdefs [ 'panels' ] );

// place your panels back into the $parser and save
$parser->_viewdefs['panels'] = $panels;
$parser->handleSave(false);

};

答案 1 :(得分:1)

Bingo - 感谢Matthew

我不知道在哪里找到这个,在Sugar论坛上,似乎没有人知道谢谢Matthew。

所以是的,使用Matthew指出的代码将面板添加到SugarCRM中的现有模块非常容易

中添加名为Events的Panel

/custom/modules/Accounts/language/en_us.lang.php

(如果您愿意,可添加或创建新文件)

添加

$mod_strings = array ('LBL_DETAILVIEW_PANEL1' => 'Events',);

然后在install package put

的/ scripts目录中的post_install.php文件中
<?php

function post_install()
{
    // Debug point - checking to see if get to post_install script
    echo "Made it to the post_install script.<br />";

    // Use the ParserFactory to edit the view arrays
    // Fetch the existing view into an array called $view_array
    require_once('modules/ModuleBuilder/parsers/ParserFactory.php');
    $view_array = ParserFactory::getParser('detailview','Accounts');
    // Declare the additional content 
    $new_content = array
    (
        0 => array
        (
            0 => array
            (
                'name' => 'created_by_name',
                'label' => 'LBL_CREATED',
            ),
            1 => array
            (
                'name' => 'modified_by_name',
                'label' => 'LBL_MODIFIED_NAME',
            ),
        ),
    );
    // Add the new content to the desired section of the view array
    $view_array->_viewdefs['panels']['lbl_detailview_panel1'] = $new_content;
    //Save the layout
    $view_array->handleSave(false);

    return;
}
?>

(我刚刚在新面板中放置了两个现有字段,但您也可以轻松地将新创建的字段(从清单文件中)放入新面板中