Проект

Общее

Профиль

Ошибка #4719

Не работает определение Resourse Root

Добавил(а) Зеленов Сергей больше 2 лет назад. Обновлено больше 1 года назад.

Статус:
Назначен
Приоритет:
Нормальный
Назначена:
Версия:
-
Дата начала:
17.02.2015
Дата завершения:
Готовность:

0%

...


Описание

Часто требуется держать в проекте различные файлы, а не только код проекта, поэтому код может лежать в папке "public_html", "www", "httpdocs", а не в корне проекта. Для правильного определения путей в phpstorm (наверное и в IDEA) можно помечать такие папки как "Resourse Root".

  • Определение путей не учитывает директорию, отмеченную как "Resourse Root". Например папка "public_html" отмечена как "Resourse Root". Тогда путь к css должен быть "/assets/css/style.css", а плагин видит файл только если написать "/public_html/assets/css/style.css", что неверно.
  • В компонентах также не определяется путь к шаблону и к компоненту, если папка bitrix лежит не в корне проекта, в папке, отмеченной как "Resourse Root".

Приложил пару скринов

2015-02-17-170930_1920x1080_scrot.png Просмотреть - Папка не отмечена, phpstorm не видит файла "/assets/css/style.css" (188 КБ) Зеленов Сергей, 17.02.2015 17:20

2015-02-17-170910_1920x1080_scrot.png Просмотреть - Отмечаем папку здесь (203 КБ) Зеленов Сергей, 17.02.2015 17:20

2015-02-17-170952_1920x1080_scrot.png Просмотреть - Папка отмечена, phpstorm прозрел (190 КБ) Зеленов Сергей, 17.02.2015 17:20

2015-02-17-171013_1920x1080_scrot.png Просмотреть - Папка отмечена, плагин не прозрел (189 КБ) Зеленов Сергей, 17.02.2015 17:20

2015 02 24 150302_1920x1080_scrot.png Просмотреть (222 КБ) Зеленов Сергей, 24.02.2015 15:06

3832 02b6f58aab1d230fb7cad56f1af699a9 125
3833 ebb80809a06446bcb42f22f416385b41 125
3834 7579f15b8438efc9707279c8ef35dca3 125
3835 11b5abbfef30be0a0ba33372ac074c5f 125
3848 8c0b8393770a058bec7a3bbeb33f8c23 125

История

#1 Обновлено Махнюк Максим больше 2 лет назад

Спасибо. Очень дельное замечание. Попробую разобраться как можно получить список путей, отмеченных как ресурсосодержащими, для проекта и учитывать их.

#2 Обновлено Махнюк Максим больше 2 лет назад

Разбираю вопрос Ваш. Есть одно непонимание. Допустим у вас в корне проекта лежит файл style.css и в папке public_html тоже лежит файл style.css. Допустим корневой папкой nginx определена папка /public_html/, а для php - /.

В таком случае, получаем, что $APPLICATION->SetAdditionalCSS('/style.css') должен подключать файл /style.css. А <link src="/style.css"> должен подключать файл /public_html/style.css; И это нормально. А вот если я включу учёт определённых Resource Roots то получится непонятная ситуация: $APPLICATION->SetAdditionalCSS('/style.css') должен какой файл подцепить? /style.css или /public_html/style.css?

Правильным кажется первый вариант. PHP подключает файлы из корня.. Или я чего-то не знаю и у вас действительно работает $APPLICATION->SetAdditionalCSS('/style.css') который подключит файл /public_html/style.css и проигнорирует /style.css? Как этого добиться?

#3 Обновлено Махнюк Максим больше 2 лет назад

Вся фишка в том, что для php и других backend должен работать учёт Source Root, а для html, css, js и прочих client side технологий - Resource Root. Но я не претендую на истину в последней инстанции. :) Потому хотелось бы узнать как это настроено у Вас.

#4 Обновлено Зеленов Сергей больше 2 лет назад

Я, если честно, не очень понимаю. Я настраиваю только Resource Root для корня веб-сервера или для продакшен-файлов стилей, скриптов. Т.е. то, что реально видно снаружи. Насколько я понимаю Source Root нужен для определения корня пространства имен в php.
https://www.jetbrains.com/phpstorm/help/content-root.html

У меня есть проект на Symfony, в котором скрипты и стили лежат в папке frontend. Корень веб-сервера в папке web. Я могу отметить папку frontend как Resource Root и phpstorm будет определять путь к css относительно её.
Т.е. определение Source Root по сути не важно. И как я понимаю $APPLICATION->SetAdditionalCSS('/style.css') тоже должен выбирать файл из Resource Root

#5 Обновлено Махнюк Максим больше 2 лет назад

А можете проверить, у вас вот этот стиль, который, обведён, если включить опцию Битрикс компресии и объединения файлов вставляется отдельно или учавствует в объединении?

#6 Обновлено Зеленов Сергей больше 2 лет назад

3848 8c0b8393770a058bec7a3bbeb33f8c23 125

Если писать правильный путь (/assets/css/style.css), то объединяет в один файл и всё работает. Если написать с public_html, то не работает. Но я не вижу связи. Или я не правильно понял ваш вопрос?

#7 Обновлено Махнюк Максим больше 2 лет назад

Я просто разбираюсь как лучше реализовать поддержку такой ситуации как у Вас, без того что бы помешать другим пользователям, работающим по классической схеме. Вроде, сложилось понимание. Как появится "свободная минутка" - организую.

#8 Обновлено Журов Михаил больше 1 года назад

  • Параметр Назначена изменился на Махнюк Максим

Немного дополню пожелание.

Раньше я всегда создавал проект в PHPStorm таким образом, чтобы DOCUMENT_ROOT веб-сервера соответствовал корню проекта (папочка /bitrix лежала в корне проекта).
Однако очень часто требуется как раз таки разделить эти пути, чтобы корень проекта в шторме был на уровень выше DOCUMENT_ROOT (например htdocs/bitrix).
Можно ли с помощью плагина добавить возможность резолвить $_SERVER["DOCUMENT_ROOT"] с помощью какой-то настройки. Например, добавить в Mark As новый пункт - Web Server Document Root. И если директория помечена таким маркером, чтобы IDE резолвила документ рут начиная от этой директории.

Связанные материалы из интернетов:
http://stackoverflow.com/questions/24725278/serverdocument-root-leads-to-unresolved-paths-in-phpstorm
https://youtrack.jetbrains.com/issue/WI-3321#tab=Comments
http://stackoverflow.com/questions/25436036/configure-phpstorm-to-take-into-account-relative-paths-for-included-files/

В "нормальных" CMS и фреймвоках, где всего одна точка входа в приложение, такая проблема не стоит, т.к. там можно задефайнить константу с DOCUMENT_ROOT и жить спокойно. Она будет резолвиться в phpstorm.
В случае же с Битриксом такое не подойдет, т.к. у приложения может быть множество точек входа и сам битрикс генерирует код с вызовом $_SERVER["DOCUMENT_ROOT"];

Возможно это имеет смысл вообще оформить в отдельный плагин, т.к. это не имеет прямого отношения к битриксу.

Экспортировать в Atom PDF