Exception Опубликовано 29 июня, 2023 Поделиться Опубликовано 29 июня, 2023 6 часов назад, edmsl сказал: Возможно ли как-то в шаблоне получить информацию о конкретном файле в Downloads? Нужно сделать селектор выбора версии файла при размещении бага. Для этого версии надо брать из файла. $file = \IPS\downloads\File::load( FILE_ID ); при указании несуществующего FILE_ID будет выбрасываться исключение OutOfRangeException edmsl 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
edmsl Опубликовано 30 июня, 2023 Автор Поделиться Опубликовано 30 июня, 2023 (изменено) Для создания новой записи бага я сделал отдельный шаблон формы и привязал его к БД с багами. В этот шаблон я добавил JS код, который мне нужен. Просто в конце добавил тег <script>. Но это не правильно, что js код в середине страницы. Так вот, как мне сделать так, чтобы этот код отрабатывал только на странице с формой создания записи в БД? Если добавить этот код в шаблон includeJS, он будет отрабатывать везде, что не нужно. Читал, что можно сделать некие контроллеры и добавлять их через атрибут, например, data-controller="core.front.mycontroller". Так вот как создать такой контроллер и привязать его к нужной странице? Или может есть еще способы? Изменено 30 июня, 2023 пользователем edmsl Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
edmsl Опубликовано 30 июня, 2023 Автор Поделиться Опубликовано 30 июня, 2023 Разобрался. Создал новый шаблон JS и привязал к странице с БД багов. Но это для страницы из Pages. А можно ли что-то подобное для стандартных страниц например для страницы с загрузками или форумов? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
edmsl Опубликовано 30 июня, 2023 Автор Поделиться Опубликовано 30 июня, 2023 23 часа назад, Exception сказал: $file = \IPS\downloads\File::load( FILE_ID ); Увы, но в объекте нет информации о версиях. Есть все другое, но версии даже в шаблон передаются отдельной переменной. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 30 июня, 2023 Поделиться Опубликовано 30 июня, 2023 2 часа назад, edmsl сказал: Увы, но в объекте нет информации о версиях. Есть все другое, но версии даже в шаблон передаются отдельной переменной. В приложении downloads в файле контроллера view.php найди как добавляются данные в $versionData и $previousVersions Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
edmsl Опубликовано 3 июля, 2023 Автор Поделиться Опубликовано 3 июля, 2023 Exception Взял кусок кода из метода и вроде как даже работает: $versionWhere = array( array( "b_fileid=?", \IPS\Request::i()->gamefile ) ); $previousVersions = iterator_to_array( \IPS\Db::i()->select( '*', 'downloads_filebackup', $versionWhere, 'b_backup DESC' )->setKeyField( 'b_id' ) ); Текущая версия: $file->version. Правда не понятно, почему нельзя все это сразу в объекте файла хранить, чтобы не лепить такие вот конструкции. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 3 июля, 2023 Поделиться Опубликовано 3 июля, 2023 8 часов назад, edmsl сказал: Правда не понятно, почему нельзя все это сразу в объекте файла хранить, чтобы не лепить такие вот конструкции. Это как минимум не эффективно 9 часов назад, edmsl сказал: $versionWhere = array( array( "b_fileid=?", \IPS\Request::i()->gamefile ) ); Немного не безопасно добавлять в where необработанные данные из request И если тебе нужны только версии, можно сделать более простой вариант: $versions = array_merge( array( $file->version ), iterator_to_array( \IPS\Db::i()->select( 'b_version', 'downloads_filebackup', array( 'b_fileid=?', (int) \IPS\Request::i()->gamefile ), 'b_version DESC' ) ) ); edmsl 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
edmsl Опубликовано 4 июля, 2023 Автор Поделиться Опубликовано 4 июля, 2023 (изменено) Все бьюсь с кастомными полями. Есть код: {{foreach $record->customFieldsForDisplay('listing') as $key => $field}} <p>1.{$key}</p> <p>2.{$field->label}</p> <p>3.{$field->value}</p> {{endforeach}} Можно ли как-то получить здесь label, formValue и value полей, как это делается при собственном форматировании поля? Или там уже только отформатированный html код и ничего более? Изменено 4 июля, 2023 пользователем edmsl Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
edmsl Опубликовано 5 июля, 2023 Автор Поделиться Опубликовано 5 июля, 2023 Путем проб и ошибок установил, что для того, чтобы получить значение кастомного поля у записи из БД с типом Связь с БД, нужно написать так: {{foreach $records as $record}} {{foreach $record->customFieldDisplayByKey('game_name','raw') as $key=> $field}} <p>{$key}</p> {{endforeach}} {{endforeach}} где game_name - Ключ шаблона кастомного поля. А в $key и будет искомое значение. В моем случае это id сборки из БД сборок, для которой нужно получить баги из БД багов. Получается, что тип поля Связь с БД - это массив с одним единственным ключем. Если попытаться вывести $field: <p>{$field}</p>, то будет ошибка шаблона. Но почему тогда не удается получить значение так: {$record->customFieldDisplayByKey('game_name','raw')[0]} Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
001 Опубликовано 5 июля, 2023 Поделиться Опубликовано 5 июля, 2023 Может так попробовать. {$record->customFieldDisplayByKey('game_name','raw')[0]->value} Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
edmsl Опубликовано 5 июля, 2023 Автор Поделиться Опубликовано 5 июля, 2023 5 минут назад, 001 сказал: Может так попробовать. Пробовал. Не работает, ничего не выводится. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Zero108 Опубликовано 5 июля, 2023 Поделиться Опубликовано 5 июля, 2023 В 22.06.2023 в 12:14, edmsl сказал: Я хочу реализовать баг-трекер. https://invisioncommunity.com/files/file/9299-bug-tracker-and-suggestions-tracker/ Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
edmsl Опубликовано 5 июля, 2023 Автор Поделиться Опубликовано 5 июля, 2023 Zero108 Это простой шаблон базы с несколькими полями, которые ни с чем не связаны. Все надо вписывать вручную. Увы, для моих целей там нет ничего интересного. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Zero108 Опубликовано 5 июля, 2023 Поделиться Опубликовано 5 июля, 2023 В 22.06.2023 в 12:14, edmsl сказал: Для каждой сборки на ее странице нужно отображать свои баги. Не совсем понятно, что такое "страница сборки". Какое приложение используется для распространения (раздачи) "сборки"? Это приложение Downloads или что-то другое? Может быть можно воспользоваться обычными комментариями для каждого файла в приложении Downloads для того, чтобы пользователи просто сообщали, что что-то не работает, как задумывалось (баг)? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
001 Опубликовано 5 июля, 2023 Поделиться Опубликовано 5 июля, 2023 {$record->customFieldDisplayByKey('sub_title', 'display')|raw} Этот код извлекает значение пользовательского поля "sub_title" с использованием указанного формата отображения и затем применяет фильтр |raw, чтобы предотвратить экранирование HTML. Убедись, что ключ шаблона ('sub_title') соответствует фактическому ключу твоего пользовательского поля, а формат отображения ('display') является выбранным для этого поля. Использование |raw позволяет рендерить HTML, созданный выбранным форматом отображения, без его экранирования. Однако, будь осторожн при использовании |raw с контентом, созданным пользователями или ненадежными источниками, чтобы предотвратить возможные уязвимости безопасности, такие как межсайтовый скриптинг (XSS). Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
edmsl Опубликовано 5 июля, 2023 Автор Поделиться Опубликовано 5 июля, 2023 1 минуту назад, Zero108 сказал: Не совсем понятно, что такое "страница сборки" Страница сборки это страница файла в Downloads. 2 минуты назад, Zero108 сказал: Может быть можно воспользоваться обычными комментариями Сейчас для багов используется отдельная тема на форуме для каждой сборки. Что, по сути, то же самое. Проблема в том, что написал один, начали обсуждать. В процессе обсуждения кто-то запостил еще один баг, потом еще и так далее. В итоге потом нужно сидеть и выискивать все записи с багами, что к чему относится и т.д. Это неудобно. Можно сделать так, чтобы на каждый баг создавалась отдельная тема. Это уже ближе и удобнее, но нет той гибкости, что дают БД, в первую очередь фильтры. Да и чисто из спортивного интереса уже хочется доделать начатое. 001 мне не нужно выводить HTML из этого поля. Тип у поля "Связь с базой данных". Там, по сути, хранится id записи, которая была выбрана при заполнении поля при создании новой записи. Если для него выбрать собственно оформление, то нам доступны три переменные: {$label}: {$value}: {$formValue}. Так вот в $formValue находится нужное мне значение. Zero108 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
001 Опубликовано 5 июля, 2023 Поделиться Опубликовано 5 июля, 2023 {$record->customFieldDisplayByKey('my_key', 'display').formValue} добавь .formValue для получения значения. Если нужно использовать другие переменные, такие как $label или $value, ты можешь добавить их в код: {$record->customFieldDisplayByKey('my_key', 'display').label} {$record->customFieldDisplayByKey('my_key', 'display').value} Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
edmsl Опубликовано 5 июля, 2023 Автор Поделиться Опубликовано 5 июля, 2023 Спойлер На скрине справа есть блок с фильтрами. Как их вывести так же? Для поля в базе я включил по нему фильтрацию, но ничего не появилось. 001 {{foreach $records as $record}} <p>{$record->customFieldDisplayByKey('game_name', 'display').formValue}</p> {{endforeach}} Получаю ошибку шаблона Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
001 Опубликовано 5 июля, 2023 Поделиться Опубликовано 5 июля, 2023 {{foreach $records as $record}} <p>{$record->customFieldDisplayByKey('game_name', 'display')['formValue']}</p> {{endforeach}} Используй квадратные скобки [ ] для доступа к значению $formValue. Это позволит получить значение $formValue из массива, возвращаемого методом customFieldDisplayByKey('game_name', 'display'). Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
edmsl Опубликовано 5 июля, 2023 Автор Поделиться Опубликовано 5 июля, 2023 001 Тоже ошибка шаблона. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
001 Опубликовано 5 июля, 2023 Поделиться Опубликовано 5 июля, 2023 {{foreach $records as $record}} <p>{{{$record->customFieldDisplayByKey('game_name', 'display').formValue}}}</p> {{endforeach}} Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
edmsl Опубликовано 5 июля, 2023 Автор Поделиться Опубликовано 5 июля, 2023 001 Синтаксис тегов или логика HTML имеет некорректный формат. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
001 Опубликовано 5 июля, 2023 Поделиться Опубликовано 5 июля, 2023 {foreach $records as $record} <p>{$record->customFieldDisplayByKey('game_name', 'display')->formValue}</p> {/foreach} я сейчас не могу проверить у себя. Может так. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
edmsl Опубликовано 5 июля, 2023 Автор Поделиться Опубликовано 5 июля, 2023 Вся эта морока была бы сведена к минимуму, если бы в блок можно было передать параметры, как в шаблон. что-то вроде: {block="my_block" params="param1, param2"} но это не работает. 001 тоже нет, ошибка шаблона. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
001 Опубликовано 5 июля, 2023 Поделиться Опубликовано 5 июля, 2023 К сожалению, в IPS нет встроенной поддержки передачи параметров в блоки (blocks) напрямую. Можно попробовать достичь желаемого результата, используя следующий подход: 1. Создайте пользовательскую переменную (user variable) перед блоком, в которой определите значения параметров: {php} $param1 = 'значение1'; $param2 = 'значение2'; {/php} 2. Используйте блок (block) с обычным синтаксисом без параметров и обращайтесь к значениям параметров через созданные переменные: {block="my_block"} <p>{$param1}</p> <p>{$param2}</p> {/block} 3. В вашем пользовательском блоке (my_block) вы можете использовать переданные значения из пользовательских переменных: {block="my_block"} <p>Параметр 1: {$param1}</p> <p>Параметр 2: {$param2}</p> {/block} Второй вариант 1. Использование глобальных переменных: В вашем контроллере или классе, который обрабатывает логику вашей страницы, установите значения параметров в глобальные переменные. В шаблоне, внутри блока, вы можете обратиться к глобальным переменным, чтобы получить значения параметров. Пример: // В контроллере или классе \IPS\Registry::set('param1', 'значение1'); \IPS\Registry::set('param2', 'значение2'); {block="my_block"} <p>{\IPS\Registry::get('param1')}</p> <p>{\IPS\Registry::get('param2')}</p> {/block} 2. Использование пользовательской функции: Создайте пользовательскую функцию (custom function), которая принимает параметры и возвращает результат. Внутри функции вы можете определить логику, основанную на переданных параметрах. В блоке вызовите созданную пользовательскую функцию и передайте параметры. Пример: // В файле вашего приложения или плагина function myCustomFunction($param1, $param2) { // Логика, основанная на переданных параметрах $output = "<p>{$param1}</p>"; $output .= "<p>{$param2}</p>"; return $output; } {block="my_block"} {myCustomFunction("значение1", "значение2")} {/block} Оба эти варианта позволяют передавать параметры в блоки в IPS, но требуют некоторых дополнительных действий и кода. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.