A következő címkéjű bejegyzések mutatása: drupal 7. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: drupal 7. Összes bejegyzés megjelenítése

2013/03/06

extra mező - létrehozás, - tartalom és - smink


források:
http://www.treehouseagency.com/learn/view-modes/extra-fields
http://api.drupal.org/api/drupal/modules!field!field.api.php/function/hook_field_extra_fields/7

Extra field létrehozás:

/**
 * Implements hook_field_extra_fields().
 */

function extra_fields_field_extra_fields() {

  $extra_fields = array();
  foreach (node_type_get_types() as $type) {

        $entity_type = 'node'; // 'node'; taxonomy_term, commerce_product, etc.
    $bundle = $type->type; // 'article', 'news', etc. - ha csak egy típusra kell akkor nem is kell a foreach és lehet statikus.
    $extra[$entity_type][$bundle] = array( // akár lehet dirkt 'node' is.
      'display' => array(
        'mezo_1' => array(
          'label' => t('Post Date'),
           'description' => t('valami'),
          'weight' => -5,
          'visible' => FALSE,
        ),
        'mezo 2' => array(
          'label' => t('Author'),
           'description' => t('valami'),
          'weight' => -3,
          'visible' => FALSE,
        ),
      ),
    );
    if ($type->has_title) {
      $extra[$entity_type][$type->type]['display']['title'] = array(
        'label' => t('Extra field: !title', array('!title' => $type->title_label)),
        'weight' => -4,
        'visible' => FALSE,
      );
    }
  }
  return $extra;
}

Tartalom belepakolás:

/**
 * Implements hook_node_view().
 * itt jön be, hogy miért hívtam $entity_type-nak. Mert azt a hook_<$entity_type>_view() kell implementálni.
 * pl.. hook_taxonomy_term_view, atc.
 */

function extra_fields_node_view($node, $view_mode, $langcode) {
  // érdemes filterezni $view_mode-ra, ha nem akarjuk mindegyiok displayünkön használni.
  $node->content['mezo_1'] = array(
'#markup' => '',
      '#view_mode' => $view_mode,
      '#theme' => 'extra_fields_title',    );
  // only return this in a non-full page situation
  if (!in_array($view_mode, array('default', 'full'))) {
    $node->content['title'] = array(
'#markup' => '',
      '#view_mode' => $view_mode,
      '#theme' => 'extra_fields_title',
    );    

  }
  $node->content['mezo 2'] = array(
    '#theme' => 'extra_fields_author',
    '#node' => $node,
    '#view_mode' => $view_mode,
  );
}

Sminkelés:

function theme_extra_fields_title($variables) {
  $node = $variables['node'];
  $view_mode = $variables['view_mode']; // itt is lehet view módonként eltérő html-t köré tenni
  $output = '
'
;
  $output .= date('F j, Y', $node->created);
  $output .= '
';
  return $output;
}

2012/09/13

Block beágyazása - de elegánsan ám!

Amikor blockot kell kódból beágyazni, nem is lehet elegánsabb a sminkfüggvényen kívül előállítani a block html kódját. Íme egy saját "hook_". :)

function hook_rendered_block($modul, $block_id) {
  $block = block_load($modul, $block_id);
  $block_rendered = 
_block_get_renderable_array(_block_render_blocks(array($block)));
  $html_block = drupal_render($block_rendered);
  return $html_block;
}


Ezután a smink függvényben, tpl-ben, akárhol, csak meg kell hívni és visszaadja ami a megjelenítésbe kell. A block_load függvény rafinált, mert $bid-t vár, de sokszor nem egyértelmű, hogy mi a 'bid' értéke. Ha a block szerkesztés oldalon megnézed a block url-t, akkor megtalálsz benne mindent, amire szükséged lehet.

admin/structure/block/manage/$module/$block_id/configure

Persze a block objektumból ki is tudod puskázni, hogy pontosan mi a 'bid' értéke, és akkor azt is megadhatod. A félreértések elkerülése végett a $bid az eredeti paraméter neve a block_load függvénynek. Én azért hívom $blokk_id -nek, mert a tid, nid, bid -ről nekem mindig szám jut eszembe, ami itt elég pontatlan lenne.

Közben CsG kollégámtól jött egy újabb ötlet, az elegancia fokozására...

Mivel a .tpl fájlokban nem illik függvényeket hívogatni, D8-ban - ha minden igaz - a valóságban is így lesz (a mostani render() állapothoz képest), így a fenti függvény hívását áttettük a template.php-be, az adott preprocess függvénybe. Mivel a $variables értékén nem csak változtatni tudunk, de hozzáadni is, így ez már gyerekjáték...

 $variables['blokk_neve'] = hook_rendered_block($modul, $block_id);

Ezután nincs más dolgunk mint a .tpl fájlban kiprintelni a tartalmat. A .tpl fájlhoz a $variables indexei kerülnek át egyszerűen meghívható változóként. Tehát a kiíratás a következőképpen fog történni...

print $blokk_neve;

Köszönet a segítségért!

2012/07/30

jelszómódosítás nélkül sehova barátocskám

Eddig nem volt olyan site, ahol ne lett volna probléma, hogy regisztráció után nem olvasta el a látogató az utasításokat és persze nem írta be a jelszavát, így mikor kilépett és újra be akart lépni nem tudta mivel lépjen be. És jött, hogy szar az egész rendszer...


Itt van sok okosság, de tid még egy olyat is, hogy a userhez hozzáköti, hogy a következő belépéskor kötelező jelszavat változtatnia... mindezt úgy valósítja meg, hogy bárhova kattint az okos, csak a sajt profil szerkesztése oldalt tölti mindig vissza.

2012/07/21

többnyelvűsítés

ha blokk és fordítható, akkor (admin/config/regional/i18n/strings) add hozzá a beviteli formát a fordítható típusokhoz...

2012/07/20

amibe soha többet nem szeretnék belefutni

egy oszlopnév ne legyen 'change', mert az istennek sem fog lefutni rajta a db_insert - time goes by :(
köszönet CsG-nek a türelemért :)

adatbázis furfang

ha lekérdezem egy tábla abcde oszlopaiból az abc oszlopait, akkor simán
$query = db_select('tabla', 't');
->fields('t', array('a', 'b', 'c'));

ám, ha az összes oszlop kell, és mert meglevő kódot egészítek ki, nem járható út a tömb feltöltése az összes oszloppal, helyesen tehát így néz ki
$query = db_select(tabla', 't');
->fields('t');