Views mező kimenetének felülírása

FleetCommand képe

Sziasztok!

Van az adatbázisban egy mező, ami numerikus állapotokat tárol el (0, 1, 2, ..). Azt szeretném megcsinálni, hogy ezt a mezőt meg tudjam jelíteni egy nézetben, de úgy, hogy ne a számokat írja ki, hanem az azoktól függő állapotokat.
Ami már megvan:

  • A mezőt fel tudtam venni a views-be és meg is jeleníti
  • Megtaláltam egy kis (sok) Google-zás után, hogy a render() függvénnyel lehet felülírni a kimenetet
  • A handler sikeresen felülírásra került, tehát a lent bemásolt kód lefut, amit egy $return "teszt"-tel ellenőriztem is

Viszont nem sikerült rájönnöm, hogy a render függvény hogy fér hozzá az eredeti, numerikus értékhez. Idáig jutottam:

class hublist_handler_field_hub_status extends views_handler_field_numeric {
 
	function render($values)
	{
		$val = "Hogy nyerem ki a numerikus értéket?";
		$ret = t("Unknown");
		switch($val)
		{
			case -1:
				$ret = t('Waiting for hublist pinger');
				break;
			case 0:
				$ret = t('Online');
				break;
			// stb...
		}
		return $ret;
	}
}

Remélem, jó úton indultam el. Kérlek titeket, ha valaki tudna segíteni, hogy érhetem el a mező eredeti értékét a render()-ből, ne tartsa magában :)
Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
drifter képe

Handlert még nem írtam ugyan, de ezt úgy oldanám meg hogy a Theme information résznél megnézném a vonatkozó mező példakódját, azt átmásolnám egy .tpl.php-be, és 2 sor php-vel értelmezném a numerikus értéket. Ott elég egyértelmű hogy hogy jutsz az értékhez.

0
0
FleetCommand képe

Szia,

Köszönöm. Végül nem smink szinten lett megoldva, de jó ötlet volt, hogy a példakódot nézzem meg... A Views modul saját include fájljából kinéztem, hogy szedi ki az értéket:
 $val = $values->{$this->field_alias};

Ez lett belőle :)

0
0
pp képe

Én ezt úgy szoktam csinálni, hogy a numerikus mezőt legördülő listára állítom (n<100) és a megengedett értékekhez felviszem, hogy:

-1|Waiting for hublist pinger
0|Online
...

és akkor az adatbázisban a szám tárolódik(már nem az én szám.. muhaha) és megjelenni meg a szöveges érték jelenik meg. Semmi sminkelés semmi hakkolás.

pp

0
0
Illyés Edit képe

Én meg a PHP kódos résznél szoktam felvinni tömbként, és akkor még fordítani is lehet. :)

<?php
return array(
  -1 => t('Waiting for hublist pinger'),
  0 => t('Online'),
);
?>
0
0
Paal képe

Ez tényleg 5letes, és nagyon jó megoldás!

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

FleetCommand képe

A beviteli formon nálam is így van. Egészen pontosan így:

		$form['adminsection']['hub_status'] = array(
			'#type' => 'select',
			'#title' => t('Hub status'),
			'#default_value' => isset($node->hub_status) ? $node->hub_status : -1,
			'#options' => array(
				-1 => t('Waiting for hublist pinger'),
				0 => t('Online'),
				// stb...
			),
			'#required' => TRUE
		);

És ez szépen működik is a node szerkesztésekor, csak a Views-hez kellett valamit kitalálni (ld néhánnyal korábban), mert az a numerikus mezőhöz alapból a számot jeleníti meg. (Remélem, nem beszélünk el egymás mellett)
0
0