Első modulom - code needs review ;)

aboros képe

A Harmadik Budapesti Drupal Használói Találkozó után hazajöttem, kinéztem egy pofásabb sminket és bár nem jártam rögtön gobai magasságokban, azért másfél órán belül csak sikerült ráhúznom a Drupal 6.1 -re. Szerettem volna megosztani a közösséggel, de hamar kiderült, hogy ez licensz akadályokba ütközik. Adta magát az ötlet, hogy készítsek egy oldalt ahol ezt megtehetem magamnak. Sminkblog kvázi, igazából yet another place for themes. Sose elég. :)

Az oldal célja, hogy a felhasználók közzé tehessék Drupal 6 sminkjeiket, böngészhessenek a sminkek között, kipróbálhassák azokat egy éles környezetben, letölthessék őket. (később értékelhessék egymás munkáját, meg az ilyenkor szokásos cuccok)

Leginkább problémásnak első blikkre az éles környezetben kipróbálás tűnt, de egy szép tavaszi estén hála ppnek, megvilágosodtam, ő percek alatt elkészítette a minimodult, ami azóta is csodásan végzi a dolgát, hatalmas tisztelet és köszönet érte! Azért is köszi, hogy engem pedig mintegy mellékesen rádöbbentetett, hogy a modulfejlesztés nem valami boszorkányvudu..

Mivel a contrib modulok jórésze hiányzik még 6.x -re, ezért egészen újfajta megközelítésben kell csinálnom a dolgom, eddig ugyanis legtöbbször a contribekre támaszkodva, szinte csak sminket kódolva, mondhatni összekattingattam a dolgokat, sminkfüggvényeket használtam azért az igaz. Szóval a hiányzókat valahogy nekem kell pótolni. Hamar kiderült, hogy a sminkben módosítani egy űrlapot, az bizony gány, modult kell fejleszteni.

Így nekiláttam és az node_example.module meg a többi .org -os doksi alapján elkezdtem tanulni és alkalmazni.

Persze rengeteg mindent nem értek még és jósok funkció jut eszembe ami tök hasznos lehetne, de egyelőre még fogalmam sincs hogyan lehet azokat egy modulban megvalósíani (vagy több modulban mittudomén).. olvasok, olvasok, olvasok, kipróbálom, olvasok... és így tovább. :)

Szeretném megmutatni ahol most tartok, mert teljesen elakadtam és nem tudom miért nem működik, aminek működni kellene. A hook_theme nem megy és nem értem miért nem. Lehet, hogy korábban csinálok valami hülyeséget, ami miatt nem megy, bár az is lehet, hogy olyan hülyeséget csinálok, ami nincs is ezzel összefüggésben, csak simán gány. Minden lehet. Ilyen az autodidakta élet... :) Tényleg nagyon segítség lenne, ha esetleges hibáimra rávilágítanátok, előre is köszönöm!

íme:

/**
* Implementation of hook_node_info().
*/
function themeshare_node_info() {
  return array(
    'themeshare' => array(
      'name' => t('Theme Share'),
      'module' => 'themeshare',
      'description' => "CREATE-CONTENT-DESCRIPTION",
    )
  );
}
 
/**
* Implementation of hook_perm().
*/
function themeshare_perm() {
  return array('create themeshare', 'edit own themeshare');
}
 
/**
* Implementation of hook_access().
*/
function themeshare_access($op, $node) {
  global $user;
 
  if ($op == 'create') {
    // Only users with permission to do so may create this node type.
    return user_access('create themeshare');
  }
 
  // Users who create a node may edit or delete it later, assuming they have the
  // necessary permissions.
  if ($op == 'update' || $op == 'delete') {
    if (user_access('edit own themeshare') && ($user->uid == $node->uid)) {
      return TRUE;
    }
  }
}
 
/**
* Implementation of hook_form().
*/
function themeshare_form(&$node) {
  $type = node_get_types('type', $node);
  $form['#attributes'] = array('enctype' => "multipart/form-data");
  // We need to define form elements for the node's title and body.
  $form['title'] = array(
    '#type' => 'textfield',
    '#title' => check_plain($type->title_label),
    '#required' => TRUE,
    '#default_value' => $node->title,
    '#weight' => -5
  );
  global $user;
  // ezt majd inkább a sminkek adminisztrálása joghoz kéne kötni,
  // ha egyátalán így kell csinálni, hogy egy mezőt csak bizonyos jogúak szerkeszthessenek.
  if ($user->uid == 1){
	$form['themename'] = array(
		'#type' => 'textfield',
		'#title' => t('Machine-readable name'),
		'#required' => FALSE,
		'#default_value' => $node->themename,
		'#weight' => -4
	  );
  }
  // We want the body and filter elements to be adjacent. We could try doing
  // this by setting their weights, but another module might add elements to the
  // form with the same weights and end up between ours. By putting them into a
  // sub-array together, we're able force them to be rendered together.
  $form['body_filter']['body'] = array(
    '#type' => 'textarea',
    '#title' => check_plain($type->body_label),
    '#default_value' => $node->body,
    '#required' => FALSE
  );
  $form['body_filter']['filter'] = filter_form($node->format);
 
  // NOTE in node_example there is some addition code here not needed for this simple node-type
 
  return $form;
}
 
/**
* Implementation of hook_help().
*/
function themeshare_help($section) {
  switch ($section) {
    case 'admin/help#themeshare':
      return t('ADMIN-HELP-TEXT');
      break;
  }
}
 
/**
/* Implementation of hook_insert()
*/
function themeshare_insert($node){
	db_query("INSERT INTO {themeshare} (vid, nid, themename) VALUES (%d, %d, '%s')", $node->vid, $node->nid, $node->themename);
}
 
/**
/* Implementation of hook_update()
*/
function themeshare_update($node) {
  // if this is a new node or we're adding a new revision,
  if ($node->revision) {
    themeshare_insert($node);
  }
  else {
	if (isset($node->themename)){
	    db_query("UPDATE {themeshare} SET themename = '%s' WHERE vid = %d", $node->themename, $node->vid);
	}
  }
}
/**
/* Implementation of hook_load()
*/
function themeshare_load($node) {
  $additions = db_fetch_object(db_query('SELECT themename FROM {themeshare} WHERE vid = %d', $node->vid));
  return $additions;
}
/**
/* Implementation of hook_view()
*/
 
function themeshare_view($node, $teaser = FALSE, $page = FALSE) {
  $node = node_prepare($node, $teaser);
  /* ez lehet tök hülyeség ezt nem így kéne...
  $node->content['body']['#value'] = "";
  foreach ($node->taxonomy as $key=>$tax){
	  $node->content['body']['#value'] .= "<ul>";
	  foreach($tax as $tkey=>$tdata){
		  $node->content['body']['#value'] .= "<li>".$tkey."->".$tdata."</li>";
	  }
	  $node->content['body']['#value'] .= "</ul>";
  }*/
  /* lehet ez is hülyeség, de most nem jut jobb eszembe */
  $screenshot = '/sites/all/themes/'.$node->themename.'/screenshot.png';
  $node->content['body']['#value'] = "<img src='".$screenshot."' />";
  return $node;
}
 
/**
/* Implementation of hook_link()
*/
function themeshare_link($type, $object, $teaser = FALSE){
	$allthemes = list_themes();
	if (isset($allthemes[$object->themename]) && $allthemes[$object->themename]->status == 1){
		$links = array();
		$links['switchtheme_link'] = array(
			'title' => t('Switch theme'),
			'href' => $_GET['q'],
			'query' => array(
				'theme' => $object->themename
			),
			'attributes' => array('title' => t('Switch to this theme now!')),
		);
		return $links;
	}
}
/**
* Page callback for hook_menu()
*/
function themeshare_page_all(){
	  $result = pager_query(db_rewrite_sql('SELECT n.nid, n.sticky, n.created FROM {node} n WHERE n.status = 1 AND n.type = "themeshare" ORDER BY n.sticky DESC, n.created DESC'), variable_get('default_nodes_main', 10));
 
  $output = '';
  $num_rows = FALSE;
  while ($node = db_fetch_object($result)) {
    $output .= node_view(node_load($node->nid), 1);
    $num_rows = TRUE;
  }
 
  if ($num_rows) {
    $feed_url = url('rss.xml', array('absolute' => TRUE));
    drupal_add_feed($feed_url, variable_get('site_name', 'Drupal') .' '. t('RSS'));
    $output .= theme('pager', NULL, variable_get('default_nodes_main', 10));
  }
  drupal_set_title('');
 
  return $output;
}
/**
*Implementation of hook_menu()
*/
 
function themeshare_menu(){
	$items['themegallery'] = array(
		'title' => 'Theme gallery',
		'page callback' => 'themeshare_page_all',
		'access arguments' => array('access content')
	);
	return $items;
}
/**
*Implementation of hook_theme()
*
* na ez már valamiért nem akar működni. bekerül a theme registry-be a themeshare-ctype -ra való hivatkozás, de mégse azzal jeleníti meg a themeshare típust... nem értem. :(
*/
 
function themeshare_theme(){
	return array(
		'themeshare' => array(
			'template' => 'themeshare-ctype',
			'arguments' => array('node' => NULL, 'teaser' => FALSE, 'page' => FALSE),
		)
	);
}
aboros képe

azt még elfelejtettem. és egyébként is nem szégyen, ha nem tud valaki valamit, szóval bátran jöhet az is, ha az van, hogy az meg az meg az tök hülyeség. köszi.

0
0

-
clear: both;

aboros képe

valami rosszat kérdeztem? vagy egyszerűen túl sokáig tart átnézni és ezért nem reagál senki? pedig úgy örülnék..

0
0

-
clear: both;

pp képe

nézném, mert érdekel a cucc, de nincs időm...

pp

0
0
aboros képe

az eddigi rengeteg segíséget és inspirációt.
próbálkozok tovább.
meg beíratkozok, az tuti. ;)

0
0

-
clear: both;

pp képe

a tanfolyam ;)
persze lesz még!

pp

0
0
aboros képe

tényleg, ez nincs sehol leírva egyébként, hogy 5.x vagy 6.x a tananyag?
(azért kérdezem, mert ha még 5.x, akkor valszeg inkább megvárom, amíg 6.x lesz és akkor nevezek be)

0
0

-
clear: both;

pp képe

még ötös az alapozás, de már kitekintünk a hatosra. Mint ahogyan a smink készítésnél is megnéztük hogyan lehet hatosra portolni a cuccot, és mennyivel egyszerűbb lesz a hatossal.

pp

0
0
thamas képe

...ezt a problémát - mert nem tudom. :o(

Viszont nagyon kíváncsivá tettél, hogy milyen sminket raktál össze és vajh, hol lehet ez a sminkblog! Hm?

0
0

Üdvözlettel:
Hajas Tamás

aboros képe

gondolod, ha megmutatható színvonalon lenne, nem dicsekednék el vele azonnyomban? :)

örülök, hogy máris ekkora az érdeklődés :) de még várni kell egy kicsit, néhány dolgot mindenképpen szeretnék megoldani mielőtt megmutatom a bétát. (webkettőben mindig minden béta, mint azt jól tudjuk: release early, release often :)

tegnap sikerült néhány fontos dolgot megoldanom, bár lehet hogy gány, majd megkérdezem a nagyokat és ha nem az, akkor szerintem jövő héten már startol is a dolog, első körben mondjuk 4-5-6 sminkkel, aztán próbálom majd úgy ütemezni, hogy hetente azért legyen 1-2-3 új smink.. és persze szabad beküldeni is.. ;)

0
0

-
clear: both;

thamas képe

Ha publikus, feltétlen kiabálj! ;o)

0
0

Üdvözlettel:
Hajas Tamás