Jump to content
SpravkaCRM.ru - Ваш справочник по CRM
SpravkaCRM.ru

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

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 (администратор) в его конфиге поменяется местами первая и вторая вкладки.

 

 

Share this post


Link to post
Share on other sites

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.


×
×
  • Create New...