Select mező admin generator alatt – egyedi értékekkel

Időnként előfordul, hogy admin generator alatt egy mező értékét egy listából lenne célszerű kiválasztani. Erre lehetőség is van, amennyiben idegenkulcsról van szó. De mi van akkor, ha egyszerűen csak szűkíteni szeretnénk a felhasználó választási lehetőségét, mindenféle kapcsolótábla beiktatása nélkül?

Na erre jó a select_range_tag() helper, ami admin generator alatt nagyszerűen használható. Mi is ez?

Eredetileg a symfony snippets oldalain találtam, amikor megoldást kerestem a fent vázolt problémára. Az ott talált dolog pont megfelelt. Használata rém egyszerű:

generator:
  ...
  param:
    ...
    edit:
      display: [..., percentage, ...]
      fields:
        ...
        percentage: { type: select_range_tag, params: min=0 max=100 step=5 }

A későbbi fejlesztés során azonban több hiányossága is felmerült (csak számsorozatokkal képes dolgozni), ezért kicsit kibővítettem. Ezzel megtartotta eredeti funkcionalitását, valamint egyedi (szöveges) értékek (és kulcsok) megadását teszi lehetővé.

generator:
  ...
  param:
    ...
    edit:
      display: [..., custom_field, ...]
      fields:
        ...
        custom_field:
          type: select_range_tag
          params:
            range:
              kulcs1: 1. opció
              kulcs2: 2. opció
              kulcs3: 3. opció

Természetesen i18n támogatást kaptak mind a kulcsok, mind az értékek. Maga a kód pedig:

function select_range_tag($name, $selected, $options) {
  $options = _parse_attributes($options);
  if ($min = _get_option($options, 'min', null) && $max = _get_option($options, 'max', null)) {
    $select_options = range($min, $max, _get_option($options, 'step', 1));
    $select_options = array_combine($select_options, $select_options);
  } else if ($range = _get_option($options, 'range', array())) {
    use_helper('I18N');
    $select_options = array();
    foreach ($range as $key => $value) {
      $select_options[__($key)] = __($value);
    }
  } else {
    $select_options = array();
  }
  if (isset($options['include_blank']) && $options['include_blank'] || isset($options['include_custom']) && $options['include_custom']) {
    if (isset($options['include_custom'])) {
      use_helper('I18N');
      $empty = array('' => __($options['include_custom']));
    } else {
      $empty = array('' => '');
    }
    $select_options = array_merge($empty, $select_options);
  }
  return select_tag($name, options_for_select($select_options, $selected));
}

function object_select_range_tag($object, $method, $options = array(), $default_value = null) {
  $options = _parse_attributes($options);
  $value = _get_object_value($object, $method, $default_value);
  return select_range_tag(_convert_method_to_name($method, $options), $value, $options);
}
Kategória: fejlesztés, gondolatok, humor, oop, php, symfony, trükkök
Címke: , , , , , ,
Közvetlen link a könyvjelzőhöz.

3 hozzászólás a(z) Select mező admin generator alatt – egyedi értékekkel bejegyzéshez

  1. Crowley szerint:

    Tetszik a megoldás.
    Kérdés hova ilessszem be a funkciót?

  2. Crowley szerint:

    Sikerült beilleszteni.
    Egy baj van vele: szűrőben nem hibaüzenetet ad.

  3. Sulik Szabolcs szerint:

    Nekem is tetszett, ezért írtam róla kicsit🙂

    Valóban nem írtam, hogyan kell beilleszteni. Szóval a többieknek: létre kell hozni egy MyHelper.php (My szabadon behelyettesíthető) valamelyik lib/helper/ könyvtárban és belemásolni a kódot. Ezután a settings.yml-ben (vagy a view-ban use_helper() segítségével) vegyük használatban azt.

    Ezután ugyanúgy lehet használni, mint az input_tag() helpert.

    A szűrőnél nincs igazán értelme, hiszen saját megoldáshoz ott úgyis partial-t fogsz használni, ahol meg már azt írsz le, amit akarsz.

    Ez kifejezetten admin generator edit action alatt egy mező értékének állítására jó, ha meg akarjuk úszni a partial-t (vagy komponenst).

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s