Egy kis D8 core munka

Kategória: 
Leírás
Egy kis D8 core munka

Az mostani művem kapcsán vettem észre az érdekességet, hogy amikor ugyanazzal a címkével van ellátva egy mező, hát ha még sok is van belőle, a manage display oldal, ahol a mezők megjelenítési sorrendje állítható, kvázi használhatatlan. Szóval szeretnénk at, hogy a címke mellett a mező gépi neve is látszódjék a táblázatban

Ez bizony a core field_ui része, így lecsaptam a lehetőségre, hogy talán nekem is sikerül felkerülni azok listájára, akiknek a keze nyomát dícséri a drupal core.

Így van most:

És így szeretnénk:

Itt egy kis kitérő: A drupal ugye a 7.8-as főverziónál jár. Lesz ám drupal 8 is, előbb-utóbb, de talán kevesen tudják, hogy a drupal 8 fejlesztése nem sokkal a drupal 7.0 kiadása után meg is kezdődött.

Ez miért érdekes ebből a szempontból?

Mert ugyan nekem a drupal 7-tel van bajom. Viszont ha drupal 7-ben megcsinálom a javítást, akkor mi garantálja, hogy a drupal 8-ban ugyanaz nem lesz hiba? Szóval bármilyen hibajavítást, még ha drupal 7-ben van is, először a 8-as, még most készülő verzióra kell elvégezni.

Ha a közösség, illetve a project vezető fejlesztői úgy döntenek, hogy ennek a 7-esben is helye van, akkor azt az issueban jelzik, és én (vagy valaki más) megírjuk ugyanezt drupal 7-re is.

Node miről is szól ez a patch?

Először megnéztem, hogy a drupalban van-e már valami kész eset, ahol ezt a bizonyos machine_name érték megjelenik. Bezony ám, a content types oldalon (admin/structure/types):

Igazából már csak meg kellett néznem, hogy ide hogyan kerül bele az a bizonyos machine name. Ez azért fontos, mert a core-ba nem kerülhet be "pistike kódja", ott mindennek rendesen dokumentálva, teljesen "drupalosan" kell lennie megírva.

Itt láttam, hogy egy sminkfüggvényt vezettek be ehhez a mezőhöz, hát én is azt tettem, és természetesen az elején alaposan dokumentáltam, hogy mit csinál ez a sminkfüggvény:

/**
 * Returns HTML for a field name and machine name for the field overview and field display overview page.
 *
 * @param $variables
 *   An associative array containing:
 *   - human_name: The human-readable name of the field
 *   - machine_name: The machine-name of the field
 *
 * @ingroup themeable
 */
function theme_field_ui_field_name($variables) {
  $output = check_plain($variables['human_name']);
  $output .= ' <small>' . t('(Machine name: @machine-name)', array('@machine-name' => $variables['machine_name'])) . '</small>';
  return $output;
}

Az új függvényemet a hook_theme hurokban is regisztrálnom kellett (a field_ui_theme már korábban benne volt):

/**
 * Implements hook_theme().
 */
function field_ui_theme() {
  return array(
    'field_ui_table' => array(
      'render element' => 'elements',
    ),
    'field_ui_field_name' => array(
      'variables' => array('human_name' => NULL, 'machine_name' => NULL),
    ),
  );
}

Majd lecseréltem a szükséges helyeken a

'label' => array(
  '#markup' => check_plain($instance['label']),
),

sorokat az újonnan bevezetett sminkfüggvényemre:

'label' => array(
  '#theme' => 'field_ui_field_name',
  '#human_name' => $instance['label'],
  '#machine_name' => $instance['field_name'],
),

És kész is. Elkészült a patch, amit párszor még boobaa segítségével reszeltem kicsit, és íme az issue, ami szeretettel várja, hogy valaki kipróbálja, letesztelje, és belekerüljön a coreba a módosítás: http://drupal.org/node/1270732

Update:
Amíg ezt a bejegyzést írtam, a drupal.org tesztrendszere szépen visszadobta a patchemet.

Na ez ugyan mi lehet?
Drupal 7-től a core része a Testing modul, leánykori nevén Simpletest. Mivel a drupal egy iszonyat összetett rendszer, ezért a fejlesztése során igencsak oda kell figyelni, ha egy hibát kijavítunk, az másik x helyen ne okozzon újabb hibákat.

Na erre találták ki a unit testeket. Amikor egy módosítás történik, a drupal robotja lefuttatja a patchet ezen a teszt rendszeren. A test unitok is a core részei, .test kiterjesztéssel szerepelnek azok a fileok, amik ezeket az előre megírt eseteket tartalmazzák.

Itt kell megjegyeznem, hogy ezelőtt még életemben nem használtam unit testet, hogyha valami zöldséget írok, nyugodtan lehet javítani.

Nálam konkrétan ott hasalt el a dolog, hogy ez a teszt program létrehozott egy mezőt, elmentette, és legenerálta a Manage Display, és a Manage Field oldalakat. Igenám, de mivel én átírtam ezekben az oldalakban a mezőt, ezért reklamált, hogy figyu, itt nem az az érték jelenik meg, ami nekem kell.

Mivel az én általam generált érték jó, ezért magába a test esetbe kellett belenyúlni, és megértetni vele, hogy mostantól ez a helyes érték:

A field_ui.test file-ban ez a sor végezte a mező vizsgálatát:

$this->assertFieldByXPath('//table[@id="field-overview"]//td[1]', $label, t('Field was created and appears in the overview page.'));

Márpedig itt a $label változó az eredetileg használt címke volt, nem az, amire én módosítottam.
Mivel a $label változót máshol is használja ez a test case, ezért bevezettem egy $rendered_label változót, ami már az újonnan létrehozott sminkfüggvényünket használja:

$rendered_label = theme('field_ui_field_name' ,$label, $field_name);
$this->assertFieldByXPath('//table[@id="field-overview"]//td[1]', $rendered_label, t('Field was created and appears in the overview page.'));

Innen már átment a teszten, legalábbis localhoston, és várom, hogy a drupal.org testrobotja is bólintson rá.

Ehh, ugye, hogy nem is olyan egyszerű a core fejlesztése?

Válasz

A mező tartalma nem nyilvános.
  • Internal paths in double quotes, written as "internal:node/99", for example, are replaced with the appropriate absolute URL or relative path.
  • Engedélyezett HTML elemek: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <del> <img>
  • A webcímek és email címek automatikusan linkekké alakulnak.
  • A sorokat és bekezdéseket a rendszer automatikusan felismeri.
  • Engedélyezett HTML elemek: <a> <blockquote> <br> <cite> <code> <dd> <del> <div> <dl> <dt> <em> <li> <ol> <p> <span> <strong> <ul>
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <bash>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <mysql>, <php>, <python>, <ruby>, <sql>. The supported tag styles are: <foo>, [foo].
  • Minden email cím át lesz alakítva ember által olvasható módon, vagy (ha a JavaScript engedélyezett) ki lesz cserélve kattintható, de biztonságos hivatkozásra.
By submitting this form, you accept the Mollom privacy policy.