Category: Drupal

Posted on in Technology, Drupal

Otin käyttöön Comment Notify -moduulin tänne blogisaitille, mutta syystä tai toisesta notifikaatioita ei lähde, vaikka niitä pyytäisi. Testailen tässä ketjussa sitä.

Posted on in Technology, Drupal

Tuli pitkästä aikaa koodattua hiukan Drupalilla. Tein tänne omalle saitilleni yksinkertaisen navigointi-footerin, joka näyttää artikkelien kategoriat. Siitä tuli ihan irrallinen moduuli, joten pistän tähän jakoon, public domain. Tästä on varmasti enemmän iloa esimerkkikoodina kuin varsinaisena tuotantomoduulina. :-)

Moduuli tuottaa blokin, jossa on kaksiulotteinen taulurakenne. Taulun thead-osuudessa ovat päätason kategoriat ja tbody-osuudessa niiden alakategoriat. Monimutkaisemmat hierarkiat vaativat tuon rakenteen miettimistä vähän eri lailla, mutta omiin tarpeisiini se täsmää. Omassa teemassani olen sijoittanut blokin erilliseen fatfooter-diviin ja tyylittänyt sen sitten CSS:llä.

taxfooter.info

name = Taxonomy footer
description = Show taxonomy navigation as a fat footer
core = 6.x
dependencies[] = taxonomy

taxfooter.module

function taxfooter_block($op = 'list', $delta = 0, $edit = array()) {
  switch ($op) {
    case 'list':
      $blocks = array(
        array('info' => t('Taxonomy footer')),
      );
      return $blocks;
    case 'configure':
      switch ($delta) {
        case 0:
          $vocs = taxonomy_get_vocabularies();
          $vocnames = array(0 => '(none)');
          foreach ($vocs as $voc) $vocnames[$voc->vid] = $voc->name;
          $form = array(
            'taxfooter_vocabulary' => array(
              '#type' => 'select',
              '#title' => t('Vocabulary to show in fat footer'),
              '#default_value' => variable_get('taxfooter_vocabulary', 0),
              '#options' => $vocnames
          ));
          break;
      }
      return $form;
    case 'save':
      switch ($delta) {
        case 0:
          variable_set('taxfooter_vocabulary', (int) $edit['taxfooter_vocabulary']);
          break;
      }
      break;
    case 'view':
      switch ($delta) {
        case 0:
          $vid = variable_get('taxfooter_vocabulary', 0);
          if ($vid <= 0) return null;
          $html = _taxfooter_render($vid);
          $block = array(
            'subject' => t('Fat Footer'),
            'content' => $html);
          break;
      }
      return $block;
  }
}

function _taxfooter_render($vid) {
  $subcolumns = 7;
  $tree = taxonomy_get_tree($vid);
  $html = '<table>';
  $html .= '<thead>';
  $html .= '<tr>';
  $count = 0;
  $toplevel = array();
  foreach ($tree as $category) if ($category->depth == 0) {
    $toplevel[] = $category->tid;
    if ($count++ > 0) $html .= '<td class="divide"></td>';
    $html .= '<td colspan="' . $subcolumns . '">';
    $html .= l($category->name . ' categories', 'taxonomy/term/' . $category->tid) . '<br/>';
    $html .= '</td>';
  }
  $html .= '</tr>';
  $html .= '</thead>';
  $html .= '<tbody>';
  $html .= '<tr>';
  $tcount = 0;
  foreach ($toplevel as $toptid) {
    $scount = 0;
    $ccount = 0;
    foreach ($tree as $subcategory) if ($subcategory->depth > 0 && in_array($toptid, $subcategory->parents)) {
      if ($tcount > 0 && $scount == 0) $html .= '<td class="divide"></td>';
      if ($scount == 0) { $html .= '<td>'; $ccount++; }
      elseif ($scount % 2 == 0) { $html .= '</td><td>'; $ccount++; }
      $html .= l($subcategory->name, 'taxonomy/term/' . $subcategory->tid) . '<br/>';
      $scount++;
    }
    while ($ccount++ < $subcolumns) {
      $html .= '</td><td>';
    }
    $html .= '</td>';
    $tcount++;
  }
  $html .= '</tr>';
  $html .= '</tbody>';
  $html .= '</table>';
  return $html;
}
Posted on in Drupal

Drupal-kehittäjä Daniel F. Kudwien kirjoittaa Drupal 7:n tilanteesta. Mielenkiintoisesti Drupal-projektin käyttämä CVS, joka alkaa olla versiohallinnassa melkoinen muinaisjäänne, on osoittautunut pullonkaulaksi projektin hallinnassa. CVS:llä on ilmeisesti niin vaikea hallita mergejä branchien välillä, että Drupalista ei saada tehtyä rinnakkaista "feature freeze" -versiota, vaan uusien ominaisuuksien kehitys pitää pysäyttää kokonaan.

Drupal 7 code freezestä on puhuttu jo aika pitkään, mutta taitaa olla vaikeaa saada innostuneet kehittäjät pysäyttämään kehitys ja keskittymään bugien korjaamiseen. Esimerkiksi Gitiin siirtyminen voisi auttaa Drupal-projektia tekemään molempia yhtäaikaa.

Posted on in Drupal

Installed the Drupal Twitter module and testing if new blog post titles appear on my Twitter account.

Posted on in Drupal

Karin blogin kommenttien inspiroimana koodasin tähän blogiini simppelin "Like"-nappulan. Sen pitäisi toimia Facebookin tyyliin ajax-periaatteella. Kyseistä nappia voi läppäistä, jos kirjoitus viehätti, muttei huvita kokonaista kommenttia kuitenkaan kirjoittaa.

Olen itse huomannut, että Facebookin "Like"-toiminto on paljon käyttökelpoisempi kuin erilaiset 5-tähden scoret tai "thumbs-up/down"-tyyppiset arvostelut. Ne vaativat arvostelijalta tietoista ajatustyötä, mutta Like-nappia voi painaa aika huoletta, jos jutussa vain on jotain hauskaa tai kiinnostavaa.

PS. Hakkereille tiedoksi, että tätä Like-nappia on helppo huijata esim. keksit tyhjentämällä, mutta sillä onnistuu lähinnä muuttamaan yhtä counteria tietokannassa...

Posted on in Drupal

Täyteenbuukattu DrupalCamp Helsinki oli hieno kokemus. Kiitokset siitä Vesa Palmulle ja mulle organisoijille sekä minut kutsuneelle Brain Alliancelle ja muille sponsoreille.

Itselleni parhainta antia olivat professional trackin teknisemmät esitykset, kuten Seppo Jaakolan MySQL/Galera-katsaus reaaliaikaiseen multi-master-klusterointiin Drupalin kanssa.

Mieleen jäi erityisesti myös Todd Ross Nienkerkin esitys 960.gs CSS-frameworkista ja sen soveltamisesta Drupaliin NineSixty-teeman avulla.

Nokialla (tai oikeastaan Nitrolla) oli kiintoisa esitys WURFLia käyttävästä Mobile Plugin -moduulista, jolla Drupalin saa vaihtamaan automaattisesti teemaa ja esim. skaalaaman kuvia päätelaitteen mukaisesti. Aikaa olisi saanut käyttää tähän aiheeseen enemmänkin, Drupaliin täysin liittymättömien markkinointipuheiden sijaan.

Toivottavasti nähdään lisää suomalaisia DrupalCamppeja jatkossakin.

Posted on in Drupal

Drupalin päivittäminen jatkuvasti uusiin versiohin on välillä tuskallista, varsinkin jos pyörittää useita servereitä ja niillä useita eri Drupal-saitteja.

Acquia tarjoaa tähän kiintoisan ratkaisun: Subversion-repositoryn, joka päivittyy aina uusimpaan Drupal-releaseen. Branchi on tägätty "1.x-6.x" eli sieltä tulee vain Acquia 1.x-sarjan (Drupal 6.x-sarjan) versioita.

Ajattelinkin kokeilla virittää omaan blogiini automaattipäivityksen, joka ajaa "svn updatea" säännöllisesti ja kutsuu sen jälkeen update.php:tä niin, että tietokantakin päivittyy automaattisesti ajan tasalle. Tämä voisi olla aika nätti automaattipäivitysratkaisu sellaisille Drupal-saiteille, jotka pyörivät hiljaa taustalla ja jotka unohtuvat muuten päivittää säännöllisesti.