SugarCRM - Принудительное раскрытие подпанелей, в которых ДЕЙСТВИТЕЛЬНО есть данные, в DetailView

Существует блог разработчиков 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>

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


person marky    schedule 15.03.2012    source источник


Ответы (1)


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

showSubPanel

person vimdude    schedule 20.05.2012