SugarCRM - форсирование подпанелей, которые действительно имеют данные для расширения в DetailView - PullRequest
0 голосов
/ 15 марта 2012

Есть статья в блоге разработчика SugarCRM , в которой объясняется, как изменить некоторые основные файлы так, чтобы подпанели были свернуты в подробном представлении, когда нет данных для отображения.

Замечательно иметь возможность добавлять эту функцию - особенно для модулей, которые имеют большое количество подпанелей. Однако мы заметили, что если пользователь сворачивает подпанель, то при загрузке модуля, который ДОЛЖЕН иметь данные в этой подпанели, подпанель остается свернутой.

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

Нам интересно, какой код нужно добавить, чтобы принудительно расширить подпанели с данными. Предположительно, это было бы вопросом добавления предложения else в коде ListView.php.

Для вашего удобства я добавил код из блога ниже.

Для тех, кто не читал блог и хочет реализовать это, ЭТО НЕ БЕЗОПАСНОЕ РЕШЕНИЕ ДЛЯ ОБНОВЛЕНИЯ !!

В файле Include / ListView / ListView.php:

if ( empty($data) ) { 
    $this->xTemplate->assign("ROW_COLOR", 'oddListRow'); 
    $thepanel=$subpanel_def; 
    if($subpanel_def->isCollection()) 
        $thepanel=$subpanel_def->get_header_panel_def(); 
    $this->xTemplate->assign("COL_COUNT", count($thepanel->get_list_fields())); 

    // BEGIN CUSTOMIZATION 
    $this->xTemplate->assign("PANEL_NAME", $thepanel->get_name()); 
    // END CUSTOMIZATION 

    $this->xTemplate->parse($xtemplateSection.".nodata"); 
}

А в файле include / SubPanel / SubPanelDynamic.html:

<!-- BEGIN: nodata -->
<tr height='20' class='{ROW_COLOR}S1'>
    <td colspan='{COL_COUNT}'>
        <em>{APP.LBL_NO_DATA}</em>
    <!-- BEGIN CUSTOMIZATION -->
    <script type="text/javascript">
    document.getElementById('subpanel_{PANEL_NAME}').style.display = 'none';
        document.getElementById('hide_link_{PANEL_NAME}').style.display = 'none';
        document.getElementById('show_link_{PANEL_NAME}').style.display = '';
    </script>
    <!-- END CUSTOMIZATION -->
</td>

Спасибо за чью-либо помощь / предложения!

1 Ответ

0 голосов
/ 20 мая 2012

У меня раньше были такие проблемы, и единственный простой способ обновления, который я нашел, - это включить файл javascript с помощью jquery, а затем манипулировать DOM на внешнем интерфейсе.Смотрите также следующий метод JavaScript:

showSubPanel

...