ExpressionEngine: условно отображать настраиваемые поля в форме ввода канала - PullRequest
4 голосов
/ 01 декабря 2011

Я создаю блог-сайт в ExpressionEngine.У меня есть два типа записей, которые я хочу сохранить на одном канале.Когда определенная категория выбрана, я хотел бы показать дополнительные поля.

**EXAMPLE
Channel > Article
    Fields:
       - Title
       - Post Body
       - Image
       - Tags

    Additional Fields for a category:
       - Price
       - Product Bio

Возможно ли это?

Ответы [ 3 ]

3 голосов
/ 02 декабря 2011

Насколько вы опытны с JavaScript?Вы можете использовать расширение CSS CSS и JS Брэндона Келли.Затем используйте небольшой пользовательский JavaScript для создания этой функциональности.Не идеально, но, вероятно, быстрее, чем написание собственного расширения.Примерно, вы бы сделали это:

  1. Создайте группу полей канала и все каналы и назначьте эту группу своему каналу
  2. Чтобы сделать его немного более удобным, вы 'Вы хотите, чтобы селектор категорий находился на той же вкладке «Публикация», что и поля: создайте пользовательский макет публикации для этого канала, который перемещает поле «Категории» со вкладки «Категории» на вкладку «Публикация»
  3. Найдите идентификационные номера каналаполя, которые вы хотите скрыть, так как это будут HTML-идентификаторы на странице публикации, которые выглядят как «hold_field_ID #»
  4. Определите идентификатор категории для категории, которую нужно щелкнуть, чтобы открыть дополнительные поля.На странице публикации эта категория будет отображаться в поле «Категории» с атрибутом «value = ID».
  5. Время сценария!Перейдите в Дополнения> Расширения> Настройки CP CSS и JS и добавьте JS в поле Custom 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() };
      });
   });  
};

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

0 голосов
/ 02 декабря 2011

Чтобы сделать это с категориями в качестве триггера, вам нужно написать собственное расширение, которое добавляет JavaScript для показа и скрытия.

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

0 голосов
/ 01 декабря 2011

Вы хотите это в панели управления или в передней части сайта?

...