Jump to content

Переименовываем и двигаем стартовую вкладку на Главной странице


Recommended Posts

Один из клиентов попросил переименовать и поменять местами первую дефолтную влкадку на главной странице SuiteCRM. В русской локализации она называется "Основная страница".

Для теста я добавил еще одну страницу, назвал ее "Другая страница", и добавил на нее какой то произвольный дашлет:

2016-12-22_18-27-40.png

Наша задача:

  1. Переименовать "Основная страница" в "Разное"
  2. Сделать вкладку "Другая страница" первой в списке вкладок.

Решение:

Чтобы переименовать первую вкладку, найдите позицию локализации (в файле include/language/ru_RU.lang.php)

$app_strings['LBL_SUITE_DASHBOARD'] = 'Основная страница';

и переименуйте ее по своему усмотрению. В нашем случае это будет:

$app_strings['LBL_SUITE_DASHBOARD'] = 'Разное';

Только я призываю вас не делать это в основных файлах системы. Для всякого рода переименований и прочей кастомизации в CRM-системе предусмотрен специальный механизм. Просто добавьте эту новую строку в файл custom/include/language/ru_RU.lang.php. Если такого файла еще пока нет в вашей системе, то создайте его. Это позволит вам делать в дальнейшем более простые обновления вашей CRM-системы до последней версии.

У меня на моей новой тестовой системе я добавил новый файл custom/include/language/ru_RU.lang.php такого содержания:

<?php
$app_strings['LBL_SUITE_DASHBOARD'] = 'Разное';

Если у вас включен режим разработчика, то новое название вкладки вы увидите сразу после загрузки главной страницы. Если же режим разработчика выключен, то чтобы увидеть результат переименования владки вам надо зайти в Администрирование -> Восстановление -> Быстрое восстановление. После этого вы также должны увидеть новое название у вкладки:

2016-12-26_21-43-30.png

 

Смена последовательности у вкладок:

У каждого пользователя SugarCRM/SuiteCRM свой набор вкладок и дашлетов на них. Набор этих вкладок хранится в таблице `user_preferences`. Эта таблица вообще в целом содержит персональные настройки пользователей. Разные. Для нашей задачи нам нужна запись, где поле `assigned_user_id` = 'ID пользователя', а `category` = 'Home'

SELECT
   `contents`
FROM
   `user_preferences`
WHERE
   `assigned_user_id` = '1'
    AND `category` = 'Home'

Если вы выполните этот запрос, то получите строку типа такой:

YToyOntzOjg6ImRhc2hsZXRzIjthOjEwOntzOjM2OiI2M2E4NDdlMy1kYWZiLTZjYjEtYzg3Mi01ODUzODdlZmRiNWEiO2E6NDp7czo5OiJjbGFzc05hbWUiO3M6MTY6IlN1Z2FyRmVlZERhc2hsZXQiO3M6NjoibW9kdWxlIjtzOjk6IlN1Z2FyRmVlZCI7czoxMToiZm9yY2VDb2x1bW4iO2k6MTtzOjEyOiJmaWxlTG9jYXRpb24iO3M6NjQ6Im1vZHVsZXMvU3VnYXJGZWVkL0Rhc2hsZXRzL1N1Z2FyRmVlZERhc2hsZXQvU3VnYXJGZWVkRGFzaGxldC5waHAiO31zOjM2OiI2M2MzMWRiMC00MDQzLTlh ...

она длинная, и я ее всю приводить не стал. Это не что иное как массив с настройками, обернутый сначало функцией serialize(), а потом функцией base64_encode. Чтобы получить сам массив нам надо сделать обратное действие: сначало строку засунуть в функцию base64_decode(), а потом полученный результат отдать в функцию unserialize(). На выходе мы получим массив с настройками панелей и дашлетов на них для текущего пользователя:

Цитата

Array
(
    [dashlets] => Array
        (
            [63a847e3-dafb-6cb1-c872-585387efdb5a] => Array
                (
                    [className] => SugarFeedDashlet
                    [module] => SugarFeed
                    [forceColumn] => 1
                    [fileLocation] => modules/SugarFeed/Dashlets/SugarFeedDashlet/SugarFeedDashlet.php
                )

            [63c31db0-4043-9a78-d08d-585387000d87] => Array
                (
                    [className] => MyCallsDashlet
                    [module] => Calls
                    [forceColumn] => 0
                    [fileLocation] => modules/Calls/Dashlets/MyCallsDashlet/MyCallsDashlet.php
                    [options] => Array
                        (
                            [filters] => Array
                                (
                                    [status] => Array
                                        (
                                            [0] => Planned
                                        )

                                    [date_entered] => Array
                                        (
                                        )

                                    [date_start] => Array
                                        (
                                        )

                                )

                            [title] => Мои звонки
                            [myItemsOnly] => 
                            [displayRows] => 5
                            [displayColumns] => Array
                                (
                                    [0] => set_complete
                                    [1] => name
                                    [2] => parent_name
                                    [3] => date_start
                                    [4] => set_accept_links
                                    [5] => status
                                    [6] => duration
                                    [7] => direction
                                    [8] => date_entered
                                    [9] => date_modified
                                    [10] => created_by
                                    [11] => assigned_user_name
                                )

                            [autoRefresh] => -1
                        )

                )

            [2193c0e2-de75-d9ff-5930-585bf046b855] => Array
                (
                    [className] => MyProjectDashlet
                    [module] => Project
                    [options] => Array
                        (
                        )

                    [fileLocation] => modules/Project/Dashlets/MyProjectDashlet/MyProjectDashlet.php
                )

        )

    [pages] => Array
        (
            [0] => Array
                (
                    [columns] => Array
                        (
                            [0] => Array
                                (
                                    [width] => 60%
                                    [dashlets] => Array
                                        (
                                            [0] => 63c31db0-4043-9a78-d08d-585387000d87
                                        )

                                )

                            [1] => Array
                                (
                                    [width] => 40%
                                    [dashlets] => Array
                                        (
                                            [0] => 63a847e3-dafb-6cb1-c872-585387efdb5a
                                        )

                                )

                        )

                    [numColumns] => 3
                    [pageTitleLabel] => LBL_HOME_PAGE_1_NAME
                )

            [1] => Array
                (
                    [columns] => Array
                        (
                            [0] => Array
                                (
                                    [dashlets] => Array
                                        (
                                            [0] => 2193c0e2-de75-d9ff-5930-585bf046b855
                                        )

                                    [width] => 100%
                                )

                        )

                    [pageTitle] => Другая страница
                    [numColumns] => 1
                )

        )

)

Здесь мы видим, что конфигурационный массив состоит из двух основных блоков: dashlets и pages.

В блоке dashlets идет перечисление списком всех дашлетов на всех страницах: тут есть ID дашлета, название класса дашлета и класса записей, которые представлены на дашлете, где находится класс дашлета (по какому пути файл лежит), настройки фильтров и колонок в дашлете.

В блоке pages мы видим уже настройки вкладок: какие влкдаки есть, сколько в них колонок, какие именно дашлеты какой ширины должны находиться в той или иной колонке.

Для решения нашей задачи нас интересует порядок следования элементов массива pages: нам нужно будет поменять местами 0 и 1 элементы массива. Тем самым мы добьемся того, что поменяются местами вкладки  с дашлетами на главной странице. Так же хочу обратить внимание на параметры pageTitle и pageTitleLabel. В первом случае этот параметр явно задает название панели. Во втором случае указан ключ локализации, который будет преобразован в значение при отображении панели в зависимости от того, какой язык пользователь выбрал при авторизации в системе.

Итак, нам надо: 

  1. Прочитать конфигурационную переменную для пользователя из таблицы `user_preferences`;
  2. Сделать преобразование хранимого строкового значения в массив при помощи base64_decode и unserialize;
  3. Поменять местами первый и второй элементы массива pages;
  4. Записать обратно в таблицу полученное значение предварительно запаковав его в serialize и base64_encode.

Вот что у меня получилось:

Файл reverseHomeTabs.php, который надо положить в главную директорию с файлами CRM-системы:

<?php
if (!defined('sugarEntry')) define('sugarEntry', true);

require_once('include/entryPoint.php');

global $db;

// Получаем настройки пользователя с ID = 1
$user_id = '1';
$sql = "SELECT * FROM `user_preferences` WHERE `category` = 'Home' AND `assigned_user_id` = '{$user_id}' AND `deleted` = 0";
$result = $db->query($sql, true);
while ($row = $db->fetchByAssoc($result)) {
    // Пробегаемся по найденным записям
    // но по идее она должна быть одна

    $arr = unserialize(base64_decode($row['contents']));

    $pages = $arr['pages'];

    // Меняем местами первую и вторую вкладки
    $arr['pages'][] = $pages[1];
    $arr['pages'][1] = $pages[];

    // Запаковываем обратно массив
    $str_new = base64_encode(serialize($arr));

    // Обновляем настройки
    $sql = "UPDATE `user_preferences` SET `contents` = '{$str_new}' WHERE `id` = '".$row['id']."'";
    $db->query($sql, true);
}

После вызова скрипта по адресу: http://url-вашей-crm-системы/reverseHomeTabs.php

у пользователя с ID=1 (администратор) в его конфиге поменяется местами первая и вторая вкладки.

 

 

Link to comment
Share on other sites

  • 6 years later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...