В этой статье Я рассмотрю два варианта отключения возможности сортировки контрагентов (а так же сортировки в других модулях) по различным полям. Если вам нужно отключить сортировку в модулях Vtiger или отключить ее не для всех в списках модулей - добро пожаловать под кат.
Первый вариант менее удобен, так как отключает возможность сортировки вообще для всех. А вот второй более гибкий, так как им можно запретить возможность сортировку в модулях для отдельных групп. Здесь Я рассмотрю оба варианта, а второй будет работать следующим образом: сортировка отключена для всех пользователей кроме администраторов. Поэтому для использования более удобного варианта сразу переходите ко второй части.
Итак, начнем с самого простого и топорного способа отключения возможности сортировки в Vtiger: отключим ее вообще для всех. Для этого нужно открыть файл /include/ListView/ListViewController.php и в районе 600 строки находим в выражении такой код:
$name = "<a href='javascript:;' onClick='getListViewEntries_js(\"".$module. "\",\"parenttab=".$tabname."&order_by=".$field->getColumnName()."&sorder=". $temp_sorder.$sort_qry."\");' class='listFormHeaderLinks'>". getTranslatedString('LBL_LIST_USER_NAME_ROLE',$module)."".$arrow."</a>"; } else { if($this->isHeaderSortingEnabled()) { $name = "<a href='javascript:;' onClick='getListViewEntries_js(\"".$module. "\",\"parenttab=".$tabname."&foldername=Default&order_by=".$field->getColumnName()."&start=". $_SESSION["lvs"][$module]["start"]."&sorder=".$temp_sorder."". $sort_qry."\");' class='listFormHeaderLinks'>".$label."".$arrow."</a>";
И заменяем его на следующий:
$name = "<a href='javascript:;'>". getTranslatedString('LBL_LIST_USER_NAME_ROLE',$module)."".$arrow."</a>"; } else { if($this->isHeaderSortingEnabled()) { $name = "<a class='listFormHeaderLinks'>".$label."".$arrow."</a>";
Но, как Я уже заметил выше, этот вариант слишком топорный. Можно сделать его более гибким, а именно отключить возможность сортировки всем, кроме администраторов. Это гораздо удобнее. Правда для этого нужно забыть первый вариант ;)
Снова идем в файл /include/ListView/ListViewController.php и находим в районе 600 строки следующий код:
if($module == 'Users' && $fieldName == 'User Name') { $name = "<a href='javascript:;' onClick='getListViewEntries_js(\"".$module. "\",\"parenttab=".$tabname."&order_by=".$field->getColumnName()."&sorder=". $temp_sorder.$sort_qry."\");' class='listFormHeaderLinks'>". getTranslatedString('LBL_LIST_USER_NAME_ROLE',$module)."".$arrow."</a>"; } else { if($this->isHeaderSortingEnabled()) { $name = "<a href='javascript:;' onClick='getListViewEntries_js(\"".$module. "\",\"parenttab=".$tabname."&foldername=Default&order_by=".$field->getColumnName()."&start=". $_SESSION["lvs"][$module]["start"]."&sorder=".$temp_sorder."". $sort_qry."\");' class='listFormHeaderLinks'>".$label."".$arrow."</a>"; } else { $name = $label; }
Здесь, после кода
else { $name = $label; }
Добавляем новое условие, при котором возможность сортировки остается включенной только для администраторов:
if (is_admin($current_user)) { $name = "<a href='javascript:;' onClick='getListViewEntries_js(\"".$module. "\",\"parenttab=".$tabname."&foldername=Default&order_by=".$field->getColumnName()."&start=". $_SESSION["lvs"][$module]["start"]."&sorder=".$temp_sorder."". $sort_qry."\");' class='listFormHeaderLinks'>".$label."".$arrow."</a>"; } else { $name = $label; }
Нет особого смысла объяснять первый вариант, ведь там все слишком просто, а вот вторым мы указываем условие if (is_admin($current_user)), которое определяет является ли пользователь администратором и для него добавляем возможность сортировки списков. Для всех остальных же эта возможность отсутствует. При этом важно оставить предыдущие условия, чтобы не нарушать функционал.