Встроенное редактирование в Composr

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

СТАТУС ВКЛЮЧЕНИЯ И ПОДДЕРЖКИ.

Сначала необходимо включить встроенное редактирование в конфигурации:
  • Зона администратора > Настройка > Конфигурация > Параметры функций > Дополнительно.
По умолчанию оно не включено по двум причинам:
  1. Встроенное редактирование по умолчанию очень простое.
  2. Мы не любим навязывать темам слишком сложные требования к компоновке.
 С этой целью встроенное редактирование поддерживается только как функция для развертывания программистами, а не как готовое решение.

ОГРАНИЧЕНИЯ.

 Встроенное редактирование поддерживает только те поля, которые можно редактировать текстовым способом.
Для CPF это жестко закодировано для следующих типов полей, выраженных как необработанные кодовые имена хуков, жестко запрограммированные в sources/cns_members.php:
  • long_text
  • long_trans
  • short_trans
  • list
  • short_text
  • codename
  • url
  • integer
  • float
  • email

ИСПОЛЬЗОВАНИЕ ВСТРОЕННОГО РЕДАКТИРОВАНИЯ.

 Встроенное редактирование активируется либо кнопкой редактирования, либо специальным кликом.
По умолчанию это происходит по специальному клику. Мы расскажем, как изменить это в разделе «Шаблоны» ниже.

 Вы можете узнать, может ли использоваться специальный щелчок, по пунктирной границе, появляющейся при наведении курсора мыши. Вам нужно удерживать как минимум две клавиши-модификаторы клавиатуры (например, Alt и Shift), а затем щелкнуть поле. Мы не полностью конкретизируем поля, потому что браузеры иногда резервируют некоторые клавиши или их может не быть на клавиатуре. На Mac клавиша Command также будет работать как одно из полей, а на Windows клавиша Windows.

 Вы завершаете встроенное редактирование, нажимая ввод. Вы отменяете, нажимая Escape.

 Встроенное редактирование будет выполняться через запрос AJAX, а затем оно обновит отображаемое значение поля новым отображаемым значением.

КАК ЭТО УСТРОЕНО.

 Дробное редактирование - это буквально дробная обработка стандартной формы редактирования Composr POSTed.
Он работает только с формами редактирования, которые были закодированы для поддержки этого.

ТЕМПКОД.

 Дробное редактирование активируется FRACTIONAL_EDITABLE директивой.
Директива принимает следующие параметры:
  • Первый параметр [обязательный] — это необработанный (неотрендеренный) исходный текст, который редактируется (например, необработанный Comcode).
  • Второй параметр [обязательный] — это имя поля, используемое в обычной форме редактирования.
  • Третий параметр [обязательный] — это ссылка на страницу актуализатора редактирования (т.е. куда переходит форма редактирования).
  • Четвертый параметр должен быть установлен в «1», если поле поддерживает Comcode.
  • Пятый параметр должен быть установлен на «1», если должны использоваться видимые ссылки для редактирования (в отличие от необходимости специального щелчка).
  • Шестой параметр — «1», если проверка доступа прошла успешно, в противном случае — «0» (если он опущен, вместо этого выполняется проверка доступа к зоне администратора).
 Внутренним содержимым директивы является отображаемый (визуализированный) текст (например, проанализированный Comcode или, по крайней мере, HTML-экранированный текст) — это то, что было бы в любом случае, если бы не было директивы.

Например:
 

Код

{+START,FRACTIONAL_EDITABLE,Some Title,title,cms:cms_example:_edit:12,0,1,1}Some & Title{+END}TEXT OR COMCODE GOES HERE
 В этом примере используется ссылка на страницу поддельного примера модуля под названием cms_example, в зоне CMS. У него есть экран актуализатора в _edit, и редактируется ID #12.

Шестому параметру может быть присвоено значение этого SUPPORTS_FRACTIONAL_EDITABLE символа.

Символ принимает следующие параметры:
  • Первый параметр [обязательно] - это та же ссылка на страницу, что и третий параметр директивы. Это используется для проверки зоны и доступа к странице редактирования.
  • Второй параметр [обязательно] для дальнейших проверок. В приведенном ниже примере я вижу, является ли текущий пользователь исходным отправителем контента.
Например {$SUPPORTS_FRACTIONAL_EDITABLE,cms:cms_example:_edit:12,{$EQ,{SUBMITTER},{$MEMBER}}}

Изменить виджеты:

 Перед вызовом FRACTIONAL_EDITABLE директивы вы можете установить переменную Tempcode, чтобы указать, какой виджет поля редактировать.
Вы можете использовать:
  • line
  • textarea
  • Или |разделенный список параметров списка
Пример редактирования строки:

Код

{$SET,edit_type,line}<BR />{+START,FRACTIONAL_EDITABLE,Some Title,title,cms:cms_example:_edit:12,0,1,1}Some &amp; Title{+END}

Пример редактирования текста:

Код

{$SET,edit_type,textarea}<BR />{+START,FRACTIONAL_EDITABLE,Some Description,description,cms:cms_example:_edit:12,0,1,1}Some &amp; Description{+END}


Пример редактирования списка:

Код

{$SET,edit_type,a|b|c}<BR />{+START,FRACTIONAL_EDITABLE,Some Option,option,cms:cms_example:_edit:12,0,1,1}Some &amp; Option{+END}
Или вы можете получить значения списка автоматически:

Код

{$SET,edit_type,{$CPF_LIST,Option Name,|,0}}<BR />{+START,FRACTIONAL_EDITABLE,Some Option,option,cms:cms_example:_edit:12,0,1,1}Some &amp; Option{+END}

ПРИМЕР РЕДАКТИРОВАНИЯ ПРОФИЛЯ УЧАСТНИКА.

 Представьте, что вы хотите развернуть CPF на пользовательской странице с комкодом и позволить участнику редактировать свой собственный CPF с этой страницы.
Этот Tempcode позволит:

Код

{+START,FRACTIONAL_EDITABLE,{$CPF_VALUE,About me,{$MEMBER}},field_1,_SEARCH:members:view:{$MEMBER},1,1,1}{$COMCODE,{$CPF_VALUE,About me,{$MEMBER}}}{+END}
Где field_1 представляет CPF с идентификатором № 1.

Символ CPF_VALUE используется для получения необработанного значения CPF. Поэтому, чтобы получить отображаемое значение поля, мы должны отобразить его через COMCODE символ.
Ссылка на страницу редактирования находится под экраном просмотра, так как отдельного экрана актуализатора для редактирования профиля участника нет, он встроен в код отображения вкладки.

PHP.

 С точки зрения PHP код редактирования должен назначать специальные значения поля по умолчанию для любого поля, которое не передается.
Эти значения поля:
  • INTEGER_MAGIC_NULL
  • STRING_MAGIC_NULL
 Метод Composr query_update обнаружит эти значения как поля, которые следует исключить из SQL- UPDATE запроса.

Этого достаточно в большинстве случаев. Однако вы также можете вызвать fractional_edit()функцию, чтобы определить, происходит ли частичное обновление.
Использование этого необходимо для чтения в полях флажков, так как неотмеченные поля нельзя отличить от пропущенных полей из-за досадного недостатка дизайна в HTML. 

Например:

Код

$example_checkbox_value = post_param_integer('example_checkbox_value', fractiona
l_edit() ? INTEGER_MAGIC_NULL : 0);<BR />

ШАБЛОНЫ.

Эти 3 шаблона относятся к дробному редактированию:
  1. FRACTIONAL_EDIT.tpl - реализует HTML для дробного редактируемого интерфейса.
  2. fractional_edit.js - реализует JavaScript для дробного редактируемого интерфейса.
  3. CNS_MEMBER_PROFILE_ABOUT.tpl – показывает, как CPF сопоставляются с FRACTIONAL_EDITABLE директивой. Он интенсивно использует метаданные дополнительных полей, переданные из sources/hooks/systems/profiles_tabs/about.php.

КОНЦЕПЦИИ.

Встроенное редактирование
Процесс редактирования отдельных полей данных прямо из интерфейса сайта.
Дробное редактирование
Фреймворк Composr обеспечивает встроенное редактирование.

Смотрите также: