Egy kis D8 core munka

The spam filter installed on this site is currently unavailable. Per site policy, we are unable to accept new submissions until that problem is resolved. Please try resubmitting the form in a couple of minutes.
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:

[geshifilter-drupal6]/** * 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; }[/geshifilter-drupal6]

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

[geshifilter-drupal6]/** * 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), ), ); }[/geshifilter-drupal6]

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

[geshifilter-drupal6]'label' => array( '#markup' => check_plain($instance['label']), ),[/geshifilter-drupal6]

sorokat az újonnan bevezetett sminkfüggvényemre:

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

É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:

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

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:

[geshifilter-drupal6]$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.'));[/geshifilter-drupal6]

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?

Hozzászólások

I think this is one of the

I think this is one of the most vital info for me.
And i'm glad reading your article. But want to remark on few general things,
The website style is perfect, the articles is really excellent : D.
Good job, cheers

http://www.netryx.co.uk

Hozzászólás

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.