Особливості випуску робочого процесу зі видаленням поля


14

Припустимо , у мене є тип вмісту Personз полями: Name, Age,Email

Цей тип вмісту контролюється функцією під назвою, testщоб я міг джерелом керувати ним та переміщувати його на активний сайт.

Мій робочий процес йде так:

  • Я додаю нове поле на PersoncallPhone
  • я локально: drush fu test -y
  • Я редагую, test.infoщоб збільшити номер версії
  • Я вношу зміни до свого сховища
  • Я висуваю цю функцію на веб-сайт (скопіювати файли функцій)
  • на живому сайті я роблю: drush fr test -y
  • на живому сайті я роблю: drush cc all

Тоді нове поле з’являється на веб-сайті в реальному часі Person.

Якщо на першому кроці я видаляю Personполе, воно не буде видалено з веб-сайту, що живе в реальному часі. Як я це вирішую? Я не хочу вручну видаляти його з інтерфейсу користувача на веб-сайті в реальному часі.
Чи правильний цей робочий процес?


1
Використовуйте drush fu test -y - інверсію з збільшенням, щоб автоматично збільшити номер версії
Майк

Відповіді:


9

Це меч з двома кінцями, він подібний до запобігання видалення даних, що завжди добре. Насправді нічого вирішити, це очікувана поведінка.

Це той самий робочий процес, який ми використовуємо і працюємо вже більше року, і він працює дуже добре. Я б сказав, що це правильно, але це дуже суб'єктивна відповідь.


І якщо я дуже хотів видалити поле? Чи варто вивчити гачки оновлення? (Я новачок D7).
cherouvim

3
Оновити гачки було б ідеально, або видалити їх вручну.
цифровий

2
Гаразд, я також міг би зробитиdrush field-delete field
cherouvim

@cherouvim Отже, ви повинні робити це кожного разу, коли ви відтворюєте функцію?
AlxVallejo

Прив’язка_update_N () у файлі .install функції буде працювати.
Майк

10

Правильний спосіб видалення вмісту, створеного функціями, є через tap_update_N (який слід реалізувати у файлі your_module.install).


Основна ідея функцій - керування конфігурацією за допомогою коду. Використання hook_update_Nузгоджується з цим, оскільки видалення поля відбувається в коді (яким можна керувати за допомогою контролю версій) - тоді як еквівалентна команда drush field-delete fieldне керується з керованого коду; це окремий крок командного рядка, який потрібно виконати (і запам'ятати для виконання).


Чому? Не буде drush field-delete fieldдобре працювати?
cherouvim

5
Впевнені, що це спрацює, і це може бути більш простим рішенням. Але основна ідея за допомогою функцій - це керування конфігурацією з кодом. Використання hook_update()узгоджується з цим, оскільки видалення поля відбувається в коді (яким можна керувати за допомогою контролю версій) - тоді як команда drush не керується з керованого коду; це окремий крок командного рядка, який потрібно виконати (і запам'ятати для виконання).
smokris

У якому файлі функції я буду використовувати ku_update ()? kuk_update () приймає об'єкт вузла як параметр, тому неможливо надати йому об’єкт вузла під час увімкнення функції.
subhojit777

@ subhojit777: На жаль, я пов’язав неправильну сторінку документації на гачок. Я просто зафіксував посилання; перегляньте документи для hook_update_N.
smokris

@smokris :) Я згадував цей гачок у своїй відповіді
subhojit777

2

Створіть новий файл під назвою "your_feature_name.install"

Всередині файлу оголосити прив’язку_update_N , там ви можете використовувати field_delete_field () і вказати ім'я поля, яке ви хочете видалити як параметр.

Запустіть update.php і поля будуть видалені.


0

Якщо ви використовуєте field_phoneв інших областях, ви можете просто вилучити його зі свого типу вмісту Person, але не видаляти його повністю зі свого сайту. Створіть YOUR_FEATURE_NAME.installфайл в папці функції вручну так:

/**
 * Implements hook_update_N().
 *
 * Removes field_phone from Person content type.
 */
function YOUR_FEATURE_NAME_update_7001() {
  if ($instance = field_info_instance('node', 'field_phone', 'person')) {
    field_delete_instance($instance);
  }
  field_purge_batch(500);
  features_revert_module('YOUR_FEATURE_NAME');
}

Якщо ви видаляли це з абзацу щодо особи замість типу вмісту для особи, ви можете змінити перше умовне висловлювання на щось подібне:

if ($instance = field_info_instance('paragraphs_item', 'field_phone', 'person')) {
  ...
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.