ExpressionEngine: условно отображать настраиваемые поля в форме ввода канала
Я строю блог-сайт в ExpressionEngine. У меня есть два типа записей, которые я хочу сохранить на одном канале. Когда определенная категория выбрана, я хотел бы показать дополнительные поля.
**EXAMPLE
Channel > Article
Fields:
- Title
- Post Body
- Image
- Tags
Additional Fields for a category:
- Price
- Product Bio
Это возможно?
3 ответа
Насколько вы опытны с JavaScript? Вы можете использовать расширение CSS CSS и JS Брэндона Келли. Затем используйте небольшой пользовательский JavaScript для создания этой функциональности. Не идеально, но, вероятно, быстрее, чем написание собственного расширения. Примерно, вы бы сделали это:
- Создайте группу полей канала и все каналы и назначьте эту группу вашему каналу.
- Чтобы сделать его немного более удобным, нужно, чтобы селектор категорий находился на той же вкладке "Публикация", что и поля: создайте собственный макет публикации для этого канала, который перемещает поле "Категории" со вкладки "Категории" на вкладку "Публикация".
- Найдите номера идентификаторов полей канала, которые вы хотите скрыть, поскольку они будут идентификаторами HTML на странице публикации, которые выглядят как "hold_field_ID#"
- Определите идентификатор категории, по которой нужно щелкнуть, чтобы открыть дополнительные поля. На странице публикации эта категория будет отображаться в поле Категории с атрибутом "value=ID".
- Время сценария! Перейдите в раздел Надстройки> Расширения> Настройки CP CSS и JS и добавьте JS в поле "Пользовательский Javascript".
Что-то вроде этого:
$(document).ready(function() {
// Cache the divs with your channel fields
var $theSecretFields = $('#hold_field_5, #hold_field_6');
// Hide them
$theSecretFields.each(function() {
// But only if they're empty (no previous saved data)
// If you're using a textarea or something else, change the .find selector
if ( $(this).find('input').val() === '' ) { $(this).hide() };
});
// When you click the category ID (the input[value="id"] selector)...
$('#hold_field_category').find('input[value="12"]').click(function() {
// Toggle the visibility of the channel fields
// Again, only show/hide them if they're empty
$theSecretFields.each( function() {
// Again, change the .find selector for your field type if necessary
if ( $(this).find('input').val() === '' ) { $(this).toggle() };
});
});
};
Возможно, вам придется встроить некоторую дополнительную логику в обработчик кликов, чтобы убедиться, что поля отображаются только при установленном флажке (среди прочего), но это основная идея.
Вы хотите это в панели управления или в передней части сайта?
Чтобы сделать это с категориями в качестве триггера, вам нужно написать собственное расширение, которое добавляет javascript для отображения и скрытия.
Возможно, вы захотите взглянуть на дополнение типа ввода, которое позволяет использовать раскрывающееся меню для изменения отображаемых полей.