drupal

Keresőoptimalizálás gyorstalpaló előadás

Nagyon jól sikerült a Drupal Hétvége 2011, innen is köszönöm a szervezőknek. A SEO gyorstalpaló előadásomnál ezt a prezi-t használtam:

Update: ustream.tv kötvetítés itt:

Az idei előadásban az általános dolgokat mutattam be. A Drupal specifikus dolgokról 2010-ben beszéltem, a Drupal keresőoptimalizálás nevű előadásban. Fordított sorrendben több értelme van a dolognak, úgyhogy előbb az idei "SEO gyorstalpaló"-t nézzétek végig, utána a 2010-est.

Drupal 7 privát fájlok letöltése csak bejelentkezett felhasználóknak

A Google maps-es példákat hamarosan folytatom, de ezt most muszáj kiírnom magamból.

Ma órákon át téptem a hajam egy egyszerűnek tűnő probléma felett: mindössze annyit szerettem volna elérni, hogy egy Drupal 7 weboldalnál a privát tárolóba feltöltött fájlokat csak bejelentkezett felhasználók tölthessék le.

Az első ötlet, hogy erre lesz egy kis pipa a jogosultságok beállítási oldalán. Hát nincs. Némi utánajárás után kiderült, hogy a Drupal nem így működik. A fájlokhoz akkor enged hozzáférni egy felhasználót, ha az adott node-hoz van hozzáférése a felhasználónak.

Nekem nem ez kellett, a node-ot mindenkinek látni kellett, csak a fájl letöltéshez kell bejelentkezni.

Jó, gondoltam, akkor majd mező (Field) szinten kezeljük a jogosultságokat.

Meg is találtam a Field permissions modult, amivel nagyszerűen be lehet állítgani minden egyes mezőre mindenféle jogot (megtekintés, létrehozás, módosítás). Szépen beállítottam amit szerettem volna, és mint aki jól végezte dolgát, léptem is a következő feladatra.

Véletlenül vettem csak észre, hogy a weboldalról a mezőt ugyan elrejti a Field Permissions modul, de a konkrét fájlt továbbra is le lehet tölteni a megfelelő webcím (URL) ismeretében.

Ezután következett egy órákon át tartó, vad és elkeseredett kattintgatás hadjárat, mindenféle tutorial és issue olvasgatás, néhány modul kipróbálása és mindenféle mágikus varázsigék mormolása. Persze minden hiába, csak nem tudtam célt érni.

És akkor itt jön az Open Source ereje.

Nem volt más hátra, meg kellett nézni a forráskódot, hogy mégis mi a fene történik a háttérben. A megoldást, nem több mint 1 perc után megtaláltam:

  • A fájl pathból (/system/files/) sejteni lehetett, hogy a system.module-ban kell keresgéljek.
  • A system_menu függvényben meg is találtam, hogy a file_download függvény szolgálja ki ezeket a kéréseket.
  • A file.inc-ben meg is találtam a függvényt, bőséges dokumentációval. Mint kiderült létezik egy hook_file_downloads hurok, amivel szabályozható a hozzáférés.

Újabb 1 teljes percet vett igénybe a megfelelő kód megírása:

<?php
modulom_file_download
($uri) {
  if (
user_is_anonymous()) {
    return -
1;
  }
}
?>

Hát ennyi volt. Több óra kattintgatás vs. 1+1 perc kódolás. De sokszor hallottam már, hogy amit lehet, saját kód helyett érdemesebb letölthető modulokkal megoldani. Egy jó darabig még nehéz lesz engem meggyőzni erről.

Munka: Profi webdesignert és sitebuildert keresek

Ügyfelek megbízására készülő weboldalak elkészítéséhez keresek profi webdesignert és Drupal sitebuildert, lehetőleg egy személyben. (Sitebuild = PSD-ből HTML + CSS készítés). Az sem baj, ha még soha nem láttál Drupalt, de ha együtt dolgozunk, akkor fogsz :)

A munkafolyamat a következőképpen néz ki:

  1. Az ügyféllel történt előzetes megbeszélések után elkészítesz egy látványtervet és esetenként logót, lehetőleg Photoshop-ban.
  2. Közben én elkészítem az oldal funkcionalitását Drupal-ban.
  3. A funkcionálisan működő oldalra ráhúzod az ügyfél által jóváhagyott látványtervet. Itt egy működő sitehoz kapsz hozzáférést, kész HTML struktúrával és sablon CSS-ekkel (Drupal Zen smink vagy Fusion, Tao, Genesis, stb...). A munka 95% megoldható a CSS átírásával. Ha a HTML struktúrán kell változtatni, szólsz és én megoldom.

Ha magadra ismertél és a fenti munkafolyamat szerint tudsz dolgozni, kérlek jelentkezz a hello (csiga) edgarpe (pont) hu címen vagy a kapcsolat űrlapon.

Kérlek írj minél több referenciát és alaposan írd le azt is, hogy az egyes projektekben mi volt a feladatod, hogyan készült el a site design része. Azt is írd meg, hogy hozzávetőlegesen milyen árakkal dolgozol, a fenti módszerrel elkészülő webdesign esetén. Számlaképességet is jelezd légyszives.

A munka távolról is végezhető, Skypeon keresztül tartjuk majd a kapcsolatot.

Végül, ha nem Te vagy az én emberem de ismersz olyat akit érdekelhet kérlek juttasd el hozzá ezt a bejegyzést a lenti közösségi megosztók segítségével, vagy a linket közvetlenül:

http://edgarpe.hu/munka-profi-webdesigner-sitebuilder

A Drupal kereső adatok használata saját modulban.

Ez is egy olyan bejegyzés, amit leginkább magamnak írok. Nem egy bejegyzést írtam már, amit újra meg újra visszakeresek, hogy kimásoljam a benne lévő kódrészletet. Bár a logfájlok alapján, úgy tűnik másokat is érdekelnek ezek a bejegyzések.

Szóval, többször előfordult már, hogy a Drupal kereső funkciójának az adatait integrálni akartam egy saját megoldásba, és mindig elég nehezen sikerült megtalálni a jó megoldást, ezért most leírom egyet, ami nekem bevált.

Mikor is van erre szükség? Legutóbb egy meglehetősen összetette kereső funkciót kellett kivitelezni, aminek a kulcsszavas kereső funkció csak egy kis része volt. Máskor pedig a hírekhez rendelt címkéket használtam kereső kifejezésnek, így implementáltam hasonló tartalom ajánló funkciót a oldalra, mert a meglévő megoldások nem váltak be.

Ezeknek az eseteknek közös eleme, hogy a Drupal keresővel egy keresést kell végeztetni, de az eredményeket nem megjeleníteni kell, ehelyett további feldolgozás vár az adatokra.

Az első ötlet, hogy közvetlenül a search_* adatbázis táblákon végzünk keresést. Bár ez is egy lehetőség, meglehetősen összetettek ezek a táblák, nem arra vannak kitalálva, hogy egyetlen SELECT utasítással hozzájussunk az eredményhez. Ennél sokkal egyszerűbben, egyetlen függvény hívással is el lehet intézni a dolgot.

Drupal 6-ban:

<?php
 $talalatok
= node_search('search', 'kereső kifejezés');
?>

Drupal 7-ben:

<?php
 $talalatok
= node_search_execute('kereső kifejezés');
?>

A Drupal a node-okon kívül a felhasználókban és potenciálisan még ezer másik dologban is tud keresni, de nekünk most elég lesz a node-okban keresni. Általában úgyis ez érdekel minket. Ráadásul ha más objektumban akarunk keresni, akkor elég a node_search helyett pl. a user_search függvényt használni.

De nézzük egy kicsit tovább a dolgot, mi van ha csak egy node típust várunk eredményként? Ezt az információt a kereséséi kifejezéshez kell hozzáadni, így:

Drupal 6-ban:

<?php
 $talalatok
= node_search('search', 'kereső kifejezés type:nodetipus');
?>

Drupal 7-ben:

<?php
 $talalatok
= node_search_execute('kereső kifejezés type:nodetipus');
?>

A Drupal mag összetett keresője több más szűrő paramétert is ismer, nem csak a típust. Ezek használatát a legegyszerűbben úgy deríthetjük ki, ha a /search oldalon használjuk az összetett keresőt és megnézzük, hogy mi kerül a keresési kifejezés mezőbe.

Ahhoz hogy, a fenti megoldás működjön természetesen szükséges az, hogy a Drupal mag kereső modulja be legyen kapcsolva és a tartalmakat folyamatosan indexelje, azaz hogy az ütemezett feladatok (cron) be legyen állítva.

Active Tags beviteli mező saját űrlapon.

A közösségi oldalak egyik elmaradhatatlan eleme a címkék használata. Ma már nagyon sok oldalon láthatóak címkefelhők, amelyeket általában a közösség szerkeszt, nem hivatásos szerkesztők. A címkéket általában vesszővel elválasztva kell felvinni egy szövegbeviteli mezőbe, így működik a Drupal megoldása is, a taxonomy modulban.

De bizony sokszor gondot okoz a felhasználóknak a vesszővel való elválasztás, néha más elválasztó jeleket használnak, például szóközt, így sokszor hibás címkék jönnek létre. Még olyan weboldalakon is tapasztaltam ezt, ami kifejezetten technikailag képzett felhasználóknak szól. Aki felhasználóbarát honlapot szeretne készíteni, az nem mehet el a probléma mellett.

Erre ad megoldást az Active Tags modul, ami módosítja a címkék felvitelét úgy, hogy enter leütésére felveszi a címkét egy listára amit rögtön meg is jelenít a felhasználónak. Így a következő címkét már nem kell vesszővel elválasztani.

Active Tags modul

Nagyon hasznos modulnak bizonyul az Active Tags, de csak a Drupal node űrlapokon jelenik meg. Pedig hasznos lenne egyéb, nem node form-okon is használni. Ennek a lehetőségnek jártam utána, és a megoldás szerencsére roppant egyszerű.

Először nézzük a kódrészletet:

<?php
 
function example_form(&$form_state) {
 
$input_wrappers = array('#edit-tags-wrapper');

 
drupal_add_css(drupal_get_path('module', 'active_tags') .'/active_tags.css', 'module');

 
drupal_add_js(array('active_tags' => $input_wrappers), 'setting');

 
drupal_add_js(drupal_get_path('module', 'active_tags') .'/active_tags.js', 'module', 'footer');

 
// $form definició ...
 
return $form;
}
?>

Az első sorban felsoroljuk azokat az űrlap elemeket, ahol használni akarjuk az active_tags bevitelt. Egészen pontosan az űrlap elemeket körülvevő wrapper div-ek azonosítóit kell felsorolni. Tulajdonképpen ezek jQuery kiválasztók lesznek. A harmadik sorban ezt a listát egy Javascript beállításként, Drupal.settings.active_tags néven hozzáadjuk az oldalhoz.

A második és negyedik sor egész egyszerűen az active tags modul css és javascript fájljait adja hozzá az oldalhoz. Figyeljük meg, hogy az active tags Javascript fájl az oldal aljára kerül, nem a fejlécbe.

Ennyi az egész, a fenti 4 sor beszúrásával bármelyik saját fejlesztésű űrlapba beszúrva használható az active tags. Sőt, más modulok űrlapjainál úgyszintén, ekkor a hook_form_alter()-ben kell hozzáadni a fenti négy sort.

Oldalak

Feliratkozás RSS - drupal csatornájára