29 июня, 20231 yr comment_194309 6 часов назад, edmsl сказал: Возможно ли как-то в шаблоне получить информацию о конкретном файле в Downloads? Нужно сделать селектор выбора версии файла при размещении бага. Для этого версии надо брать из файла. $file = \IPS\downloads\File::load( FILE_ID ); при указании несуществующего FILE_ID будет выбрасываться исключение OutOfRangeException
30 июня, 20231 yr Author comment_194328 Для создания новой записи бага я сделал отдельный шаблон формы и привязал его к БД с багами. В этот шаблон я добавил JS код, который мне нужен. Просто в конце добавил тег <script>. Но это не правильно, что js код в середине страницы. Так вот, как мне сделать так, чтобы этот код отрабатывал только на странице с формой создания записи в БД? Если добавить этот код в шаблон includeJS, он будет отрабатывать везде, что не нужно. Читал, что можно сделать некие контроллеры и добавлять их через атрибут, например, data-controller="core.front.mycontroller". Так вот как создать такой контроллер и привязать его к нужной странице? Или может есть еще способы? Edited 30 июня, 20231 yr by edmsl
30 июня, 20231 yr Author comment_194329 Разобрался. Создал новый шаблон JS и привязал к странице с БД багов. Но это для страницы из Pages. А можно ли что-то подобное для стандартных страниц например для страницы с загрузками или форумов?
30 июня, 20231 yr Author comment_194338 23 часа назад, Exception сказал: $file = \IPS\downloads\File::load( FILE_ID ); Увы, но в объекте нет информации о версиях. Есть все другое, но версии даже в шаблон передаются отдельной переменной.
30 июня, 20231 yr comment_194343 2 часа назад, edmsl сказал: Увы, но в объекте нет информации о версиях. Есть все другое, но версии даже в шаблон передаются отдельной переменной. В приложении downloads в файле контроллера view.php найди как добавляются данные в $versionData и $previousVersions
3 июля, 20231 yr Author comment_194410 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. Правда не понятно, почему нельзя все это сразу в объекте файла хранить, чтобы не лепить такие вот конструкции.
3 июля, 20231 yr comment_194414 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' ) ) );
4 июля, 20231 yr Author comment_194446 Все бьюсь с кастомными полями. Есть код: {{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 код и ничего более? Edited 4 июля, 20231 yr by edmsl
5 июля, 20231 yr Author comment_194461 Путем проб и ошибок установил, что для того, чтобы получить значение кастомного поля у записи из БД с типом Связь с БД, нужно написать так: {{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]}
5 июля, 20231 yr comment_194462 Может так попробовать. {$record->customFieldDisplayByKey('game_name','raw')[0]->value}
5 июля, 20231 yr Author comment_194463 5 минут назад, 001 сказал: Может так попробовать. Пробовал. Не работает, ничего не выводится.
5 июля, 20231 yr comment_194464 В 22.06.2023 в 12:14, edmsl сказал: Я хочу реализовать баг-трекер. https://invisioncommunity.com/files/file/9299-bug-tracker-and-suggestions-tracker/
5 июля, 20231 yr Author comment_194465 Zero108 Это простой шаблон базы с несколькими полями, которые ни с чем не связаны. Все надо вписывать вручную. Увы, для моих целей там нет ничего интересного.
5 июля, 20231 yr comment_194466 В 22.06.2023 в 12:14, edmsl сказал: Для каждой сборки на ее странице нужно отображать свои баги. Не совсем понятно, что такое "страница сборки". Какое приложение используется для распространения (раздачи) "сборки"? Это приложение Downloads или что-то другое? Может быть можно воспользоваться обычными комментариями для каждого файла в приложении Downloads для того, чтобы пользователи просто сообщали, что что-то не работает, как задумывалось (баг)?
5 июля, 20231 yr comment_194467 {$record->customFieldDisplayByKey('sub_title', 'display')|raw} Этот код извлекает значение пользовательского поля "sub_title" с использованием указанного формата отображения и затем применяет фильтр |raw, чтобы предотвратить экранирование HTML. Убедись, что ключ шаблона ('sub_title') соответствует фактическому ключу твоего пользовательского поля, а формат отображения ('display') является выбранным для этого поля. Использование |raw позволяет рендерить HTML, созданный выбранным форматом отображения, без его экранирования. Однако, будь осторожн при использовании |raw с контентом, созданным пользователями или ненадежными источниками, чтобы предотвратить возможные уязвимости безопасности, такие как межсайтовый скриптинг (XSS).
5 июля, 20231 yr Author comment_194468 1 минуту назад, Zero108 сказал: Не совсем понятно, что такое "страница сборки" Страница сборки это страница файла в Downloads. 2 минуты назад, Zero108 сказал: Может быть можно воспользоваться обычными комментариями Сейчас для багов используется отдельная тема на форуме для каждой сборки. Что, по сути, то же самое. Проблема в том, что написал один, начали обсуждать. В процессе обсуждения кто-то запостил еще один баг, потом еще и так далее. В итоге потом нужно сидеть и выискивать все записи с багами, что к чему относится и т.д. Это неудобно. Можно сделать так, чтобы на каждый баг создавалась отдельная тема. Это уже ближе и удобнее, но нет той гибкости, что дают БД, в первую очередь фильтры. Да и чисто из спортивного интереса уже хочется доделать начатое. 001 мне не нужно выводить HTML из этого поля. Тип у поля "Связь с базой данных". Там, по сути, хранится id записи, которая была выбрана при заполнении поля при создании новой записи. Если для него выбрать собственно оформление, то нам доступны три переменные: {$label}: {$value}: {$formValue}. Так вот в $formValue находится нужное мне значение.
5 июля, 20231 yr comment_194469 {$record->customFieldDisplayByKey('my_key', 'display').formValue} добавь .formValue для получения значения. Если нужно использовать другие переменные, такие как $label или $value, ты можешь добавить их в код: {$record->customFieldDisplayByKey('my_key', 'display').label} {$record->customFieldDisplayByKey('my_key', 'display').value}
5 июля, 20231 yr Author comment_194470 Спойлер На скрине справа есть блок с фильтрами. Как их вывести так же? Для поля в базе я включил по нему фильтрацию, но ничего не появилось. 001 {{foreach $records as $record}} <p>{$record->customFieldDisplayByKey('game_name', 'display').formValue}</p> {{endforeach}} Получаю ошибку шаблона
5 июля, 20231 yr comment_194471 {{foreach $records as $record}} <p>{$record->customFieldDisplayByKey('game_name', 'display')['formValue']}</p> {{endforeach}} Используй квадратные скобки [ ] для доступа к значению $formValue. Это позволит получить значение $formValue из массива, возвращаемого методом customFieldDisplayByKey('game_name', 'display').
5 июля, 20231 yr comment_194473 {{foreach $records as $record}} <p>{{{$record->customFieldDisplayByKey('game_name', 'display').formValue}}}</p> {{endforeach}}
5 июля, 20231 yr Author comment_194474 001 Синтаксис тегов или логика HTML имеет некорректный формат.
5 июля, 20231 yr comment_194475 {foreach $records as $record} <p>{$record->customFieldDisplayByKey('game_name', 'display')->formValue}</p> {/foreach} я сейчас не могу проверить у себя. Может так.
5 июля, 20231 yr Author comment_194476 Вся эта морока была бы сведена к минимуму, если бы в блок можно было передать параметры, как в шаблон. что-то вроде: {block="my_block" params="param1, param2"} но это не работает. 001 тоже нет, ошибка шаблона.
5 июля, 20231 yr comment_194477 К сожалению, в 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, но требуют некоторых дополнительных действий и кода.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.