S

Sipaj

0
Репутация
0
Рейтинг
#3 [ЕСТЬ РЕШЕНИЕ] Некорректный вывод ссылок в виджетах при установленном типе контента по-умолчанию 24 июня 2018 в 16:07


Приветствую уважаемые форумчане!
Тоже этим вопросом озадачен давно и хотел уже создать тему, но нашел ее уже созданной)))
У меня такая же проблема, что когда переходишь с виджета, добавляется системное имя, когда переходишь со списка, системного имени типа контента нет.
Не знаю, проблема ли это, но скорее всего да и кто-нибудь еще сталкивался с подобным?
Версия 2.10

skewes

Кстати, в версии 2.10 все эти неточности остались без изменений.
#1 [ЕСТЬ РЕШЕНИЕ] Некорректный вывод ссылок в виджетах при установленном типе контента по-умолчанию 14 марта 2018 в 22:06
Установил тип контента по умолчанию на Статьи и ожидал увидеть ссылки в виджетах типа Список контента в соответствующем виде. Вместо
test.tdl/articles/war/33-trydtsat-tri-bogatyrya.html
такое
test.tdl/war/33-trydtsat-tri-bogatyrya.html
И… не дождался. Стал разбираться и выяснил следующее.
В виджетах ссылка на контент формируется в функции href_to определённая в system/libs/html.helper.php
  1. function href_to($controller, $action = '', $params = false){
  2.  
  3. $lang_href = cmsCore::getLanguageHrefPrefix();
  4.  
  5. return cmsConfig::get('root') .($lang_href ? $lang_href.'/' : ''). href_to_rel($controller, $action, $params);
  6.  
  7. }
  8.  
  9. function href_to_rel($controller, $action = '', $params = false){
  10.  
  11. // лишнее покоцано
  12. //....
  13.  
  14. $ctype_default = cmsConfig::get('ctype_default');
  15.  
  16. if ($ctype_default && $ctype_default == $controller){
  17. if (preg_match('/([a-z0-9\-\/{}]+)(.html|\/view\-[a-z0-9\-_]+)$/i', $action)){
  18. $controller = '';
  19. }
  20. }
  21. // лишнее покоцано
  22. //....
  23. }
  24.  
  25. return trim($href, '/');
  26.  
  27. }
Смотрим код и видим попытку очистить $controller если он совпадает с установленным типом контента по умолчанию. Но этого не происходит.
Оказалось, что в href_to должна попадать ссылка с префиксом .html, что следует из регулярного выражения (в регулярке маленькая неточность, которая вообщем-то не влияет на результат). Например: war/33-trydtsat-tri-bogatyrya.html
Но в href_to попадает такая строка war/33-trydtsat-tri-bogatyrya и… регулярка не срабатывает и очистки контролёра $controller не происходит.

В результате виджеты выводят ссылки на контент без учёта настройки типа контента по умолчанию. А что — всё работает по прежнему )))

Как оказалось, в файлах шаблонов в папке templates/default/controllers/content/widgets/list/*.* есть строки, которые неверно передают параметры:
  1. // файл templates/default/controllers/content/widgets/list/list_basic.tpl.php (строка 7)
  2. $url = href_to($ctype['name'], $item['slug']) . '.html';
именно здесь передаётся параметр в $item['slug'] например war/33-trydtsat-tri-bogatyrya, тогда как должен был передать war/33-trydtsat-tri-bogatyrya.html
Префикс .html в самом буквальном смысле этого слова остаётся за скобками laugh
Исправляется перемещением скобки вправо:
  1. // файл templates/default/controllers/content/widgets/list/list_basic.tpl.php (строка 7)
  2. $url = href_to($ctype['name'], $item['slug'] . '.html');
После чего регулярка правильно отрабатывает. Ну и устраните неточность в регулярке функции href_to_rel в файле system/libs/html.helper.php
  1. // Так будет правильно
  2. if (preg_match('/([a-z0-9\-\/{}]+)(\.html|\/view\-[a-z0-9\-_]+)$/i', $action)){
  3. $controller = '';
  4. }
Движок: InstantsCms 2.9.0
#5 При добавлении записи в типе контента выдает 500 ошибку 1 августа 2017 в 00:10
Да, таки поле юзера в форме добавления не появляется. В принципе, он мне не нужен, но судя по обязательным полям, появится обязан. Но его нет. Моя проблема лечится так, как в картинке — "Значение из профиля пользователя" устанавливается в Нет
Прикрепленный файл
instant01_prp5o.jpg 169 Кб
#6 При добавлении записи в типе контента выдает 500 ошибку 31 июля 2017 в 21:41
Тоже столкнулся с такой проблемой. (ICMS 2.8 обновлённый с 2.7.2) Создал тип контента "Каталог вэб сайтов", уже после обновления до ICMS 2.8. Добавляю запись, жму сохранить и вываливается белый экран с такими ошибками:
  1. Warning: Illegal string offset 'id' in D:\OpenServer\domains\city\system\fields\user.php on line 17
  2.  
  3. Warning: Illegal string offset 'nickname' in D:\OpenServer\domains\city\system\fields\user.php on line 17
  4.  
  5. Warning: Cannot modify header information - headers already sent by (output started at D:\OpenServer\domains\city\system\fields\user.php:17) in D:\OpenServer\domains\city\system\core\controller.php on line 738
  6.  
  7. Warning: Cannot modify header information - headers already sent by (output started at D:\OpenServer\domains\city\system\fields\user.php:17) in D:\OpenServer\domains\city\system\core\controller.php on line 740
Однако сама запись корректно добавляется и из админки также корректно редактируется.

Посмотрел на что он ругается и не понял...

  1. class fieldUser extends cmsFormField {
  2.  
  3. public $title = LANG_PARSER_USER;
  4. public $is_public = false;
  5. public $sql = 'varchar(255) NULL DEFAULT NULL';
  6. public $filter_type = 'int';
  7. public $filter_hint = LANG_PARSER_USER_FILTER_HINT;
  8. public $allow_index = false;
  9.  
  10. public function getInput($value) {
  11. return html_input('text', $this->name, $value);
  12. }
  13.  
  14. public function parse($value){
  15. return '<a href="'.href_to('users', $value['id']).'">'.htmlspecialchars($value['nickname']).'</a>'; // Ругается на эту строку
  16. }
  17.  
  18. public function applyFilter($model, $value) {
  19. $users_model = cmsCore::getModel('users');
  20. $users = $users_model->filterLike('nickname', "%{$value}%")->getUsers();
  21. if (!$users){
  22. return $model->filterIsNull($this->name . '_id');
  23. } else {
  24. $users_ids = array_collection_to_list($users, 'id', 'id');
  25. return $model->filterIn($this->name . '_id', $users_ids);
  26. }
  27.  
  28. }
  29.  
  30. }
В чём может быть проблема? Или — откуда вызывается public function parse?
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.