Sminkfüggvény felülírása Drupal 6.x -ben

aboros képe

Sehogy nem tudom rávenni a Drupalt, hogy használja a függvényemet.

Drupal 6 -ban, CCK -val csináltam egy saját tartalomtípust, nevezzük 'maki' -nak. Felvettem egy szövegmezőt, amit szeretném, ha csak bizonyos csoportok vagy bizonyos jogosultsággal rendelkezők láthatnának a szerkesztés/bevitel űrlapon. 5.x -ben erre volt CCK Field Permissions, de 6.x -re még nincsen ezért elkezdtem alternatív megoldás után kutatni. Devel modullal megnéztem, hogy a függvény, ami létrehozta a beviteli űrlapot a theme_node_form() volt. Azt ajánlotta a Devel, hogy nevezzem a függvényemet garland_maki_node_form() -nak. Az api.drupal.org -on megkerestem (develben kattintottam) a theme_node_form() fgvt, kimásoltam azt onnan és a sminkem (garland) template.php -jába bemásoltam azt. Gondoltam ezután szabadon variálhatok azzal, de nem, sajnos akármit is változtatok meg, semmi nem történik. Hibaüzenet sincs. Hiába törlöm a cachet és hiába eszközlök bármilyen változtatást a függvényben, semmi nem változik az oldalon. Mit rontok el?

template.php:

function garland_maki_node_form() {
 
	drupal_set_message("WTF?");
 
	  $output = "\n<div class=\"node-form\">\n";
 
	  // Admin form fields and submit buttons must be rendered first, because
	  // they need to go to the bottom of the form, and so should not be part of
	  // the catch-all call to drupal_render().
	  //drupal_set_message(print_r($form));
	  $admin = '';
	  if (isset($form['author'])) {
		$admin .= "    <div class=\"authored\">\n";
		$admin .= drupal_render($form['author']);
		$admin .= "    </div>\n";
	  }
	  if (isset($form['options'])) {
		$admin .= "    <div class=\"options\">\n";
		$admin .= drupal_render($form['options']);
		$admin .= "    </div>\n";
	  }
	  $buttons = drupal_render($form['buttons']);
 
	  // Everything else gets rendered here, and is displayed before the admin form
	  // field and the submit buttons.
	  $output .= "  <div class=\"standard\">\n";
	  $output .= drupal_render($form);
	  $output .= "  </div>\n";
 
	  if (!empty($admin)) {
		$output .= "  <div class=\"admin\">\n";
		$output .= $admin;
		$output .= "  </div>\n";
	  }
	  $output .= $buttons;
	  $output .= "</div>\n";
 
	  #return $output;
}

Mindent elolvastam amit csak lehet ezzel kapcsolatban az .org -on (najó, lehet nem mindent, de nagyon sokat), megnéztem a devel screencastot, elolvastam az api.drupal.org -on a vonatkozó részeket, meg a handbook 6.x vonatkozó részeit és szerintem jól csinálok mindent. Ha jól értem a fentiekben végrehajtott folyamat és a garland_maki_node_form() sminkfüggvényem hatására az kellene, hogy történjen, hogy a form nem jelenik meg (kikommenteztem, hogy return $output;) és egy drupal üzenet jelenik meg: WTF (első sorba beírtam, hogy drupal_set_message("WTF?") ) de nem történik semmi.

Nagyon örülnék egy kis segítségnek, mert kezd elhagyni az erő, az őrület határán vagyok. :(

Fórum: 
aboros képe

miért van az, hogy a THEME_menu_local_tasks() simán működik, de a THEME-TYPE-node-form() az sehogy se akar menni... ráadásul az is megy, hogy THEME-node-form(), úgy csinálja, de úgy minden típus űrlapját piszkálja, én meg csak egyét akarom. ami van 6.x doksiban function-override témában és ahova az linkel, azt mind elolvastam, mégse megy, kihagytam valamit?

0
0

-
clear: both;

crt képe

A theme_node_form-ban le tudod ellenőrizni a tartalomtípust és megadhatod feltételként.

Üdv: Zoli

0
0
pp képe

Ha a smink neve garland, akkor theme_ erre kell lecserélned. Minden féle node típust ugyan az a form hoz létre!

0
0
aboros képe

csak azt nem értem, hogy a devel akkor miért ajánlja, hogy nevezzem THEME_TYPE_node_form() -nak... úgy nem megy. :( vagy akkor úgy menne, ha modul definiálta volna a ttipust és az megvalósítana egy theme_TYPE_node_form() -ot?

0
0

-
clear: both;

aboros képe

a célom az volt, hogy cck field permissions hiányában megoldjam valahogyan (nem vagyok sajnabajna modulfejlesztő), hogy egy adott típus bizonyos mezőjét csak egy adott user (1) tudja szerkeszteni. végülis sikerült valamilyen szinten megoldanom, az lenne a kérdésem, hogy a megoldás gány e, illetve mik a buktatók, ha vannak ilyenek vagy esetleg teljesen rossz megközelítésben próbálkozom.

megoldásom a template.php -ban:

function garland_node_form($form) {
	global $user;
	if ($form['#node']->type == "maki" && $user->uid != 1){
		$form['field_makifajta'][0]['value']['#attributes']['readonly'] = 'true';
	}
	  $output = "\n<div class=\"node-form\">\n";
 
	  // Admin form fields and submit buttons must be rendered first, because
	  // they need to go to the bottom of the form, and so should not be part of
	  // the catch-all call to drupal_render().
	  //drupal_set_message(print_r($form));
	  $admin = '';
	  if (isset($form['author'])) {
		$admin .= "    <div class=\"authored\">\n";
		$admin .= drupal_render($form['author']);
		$admin .= "    </div>\n";
	  }
	  if (isset($form['options'])) {
		$admin .= "    <div class=\"options\">\n";
		$admin .= drupal_render($form['options']);
		$admin .= "    </div>\n";
	  }
	  $buttons = drupal_render($form['buttons']);
 
	  // Everything else gets rendered here, and is displayed before the admin form
	  // field and the submit buttons.
	  $output .= "  <div class=\"standard\">\n";
	  $output .= drupal_render($form);
	  $output .= "  </div>\n";
 
	  if (!empty($admin)) {
		$output .= "  <div class=\"admin\">\n";
		$output .= $admin;
		$output .= "  </div>\n";
	  }
	  $output .= $buttons;
	  $output .= "</div>\n";
 
	  return $output;
}
0
0

-
clear: both;

pp képe

És ha sminket váltasz akkor máris más a helyzet... ehhez modult kell fejleszteni és a form_alter-ba betenni ugyan ezt a kódot.

pp

0
0
aboros képe

kíváncsi vagyok mire jutok.. :) de nagyon úgy néz ki, hogy nem úszom meg, hogy be ne iratkozzak egy modulfejlesztő tanfolyamra... :(

0
0

-
clear: both;