Hogyan lehet rátelepedni az RSS feed-re ?

eMeLA képe

Hogyan lehet saját modulból egyénire szabni a kifejezések RSS feed-jén megjelenő tartalmát ?

Megtaláltam a hook_nodeapi (rss item), és a node_feed() függvényeket, de nem találtam olyan csatlakozási pontot ahol egy meglévő kifejezés RSS kimenetét érhetem el !?

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
Illyés Edit képe

A lényeget nem írod, hogy pontosan milyen testreszabást szeretnél végezni. Általánosságban a lehetőségek:

  1. A tartalomtípusoknál a megjelenítés fülön tudod szabályozni, hogy az RSS-ben milyen mezők jelenjenek meg.
  2. Views modullal felülírod a taxonomy/term/%/feed útvonal kimenetét.
  3. Saját modulban hook_menu()-vel készítesz egy /egyedifeed útvonalat, ez alatt összerakod a feed-et kedvedre, és annak az útvonalát linkeled be a szükséges helyeken.
0
0
aries képe

Azaz nincs arra mód, hogy mondjuk egy hook-kal módosítsd / sminkeld egy-egy feed tartalmát.

0
0
aboros képe

szerintem el is hangzott, hook_nodeapi, op "rss item".
persze ez a legnyakatekertebb megoldás, de elvileg működik. ;)

0
0

-
clear: both;

Illyés Edit képe

Ha jól értem, akkor ő nem az rss item-eket akarja változtatni, hanem az egész taxonomy term feed-et. Például UTF-8 helyett valami más kódolással kell neki kiküldenie, mert a fogadó oldalon csak azt értik meg.

0
0
eMeLA képe

Ha lehet külön az rss item-et változtani modulból (!) akkor nekem az is elég (sőtt egyszerűbb is). De ha azt nem lehet, akkor a taxonomy term feed-nek csinálok saját útvonalat...

0
0

...mit tudok: http://web.termuves.hu

aries képe

Nemnem, csak hozzáadni tudsz. „The module can return properties to be added to the RSS item generated for this node.”

0
0
eMeLA képe

A lényeget nem olvastad... :) (...saját modulból...)

A 3. válaszodból kezdem megértem a dolog működést... Valószínű ezt fogom tenni, bár az érdekes kérdés, hogy a views hogy tudja "felülírni" a kategóriák útvonalat... !? De ehhez bele kell kukkantanom a views-ba.

0
0

...mit tudok: http://web.termuves.hu

eMeLA képe

Találtam egy kódot itt: http://www.drupalcoder.com/story/17-creating-your-own-rss-feeds-with-dru...

Ebből csináltam ezt:

function sajat_menu() { 
	drupal_add_feed('taxonomy/term/74/0/feed', 'RSS saját');
 
    $items['taxonomy/term/74/0/feed'] = array(
      'title' => t('RSS saját'),
      'page callback' => 'sajat_rss',
      'access arguments' => array('access content'),
      'type' => MENU_CALLBACK);
 
 
  return $items;
}
function sajat_rss() {
  return node_feed(array(51));  
}

A taxonomy/term/74/0/feed egy létező kifejezés RSS címe.
A saját modulomban egy meglévő útvonal kimenetét átirányítottam egy saját függvényemre. Normális ez !? Mindenesetre működik !?

0
0

...mit tudok: http://web.termuves.hu

aries képe

Normális. Mint ahogy írtam, nem tudsz más feedeket módosítani, csak újat létrehozni.

0
0
eMeLA képe

Jó, jó. De ezek szerinte egy meglévő útvonalon lévő feed tartalmának elkészítését saját modulban saját függvénnyel elő tudom állítani.

Merthogy a modulomban, a hook_menu()-ben levő taxonomy/term/74/0/feed útvonal már akkor létezett amikor még a modulom sehol nem volt.

0
0

...mit tudok: http://web.termuves.hu

csg képe

Nem tudom, hogy lehet ezt jól elmagyarázni... A drupal felépíti a menüt úgy, hogy az $items tömbbe berakja az útvonalakat, menüpontneveket, az adott oldalak előállításáért felelős függvények neveit, stb., de mielőtt ezt a tömböt ténylegesen felhasználná, a hook_menu()-vel a tömbnek ezt az elemét lecserélted arra, amit helyette szeretnél, és így azt fogja használni. Ott lesz a kódban valahol az a függvény, ami az eredeti oldalt előállítaná, de az adott útvonal már nem azt a függvény fogja meghívni, hanem az általad írtat.

Ez nemhogy normális, de a drupal egyik legnagyobb erőssége. Így működnek a hook-ok, amiknek a segítségével úgy tudod módosítani az alaprendszer - vagy esetenként más modulok - működését, hogy nem kell azoknak a kódjába belegányolni.

0
0

--
Csonka Gergely
http://cheppers.com

aries képe

Nem teljesen, erre való a hook_menu_alter() :)

0
0
csg képe

Igazad van. De ha már belekezdtem, megpróbálkozom egy korrektebb magyarázattal, hátha valakinek hasznos lehet.

A Drupal úgy állítja elő a menüt, hogy az összes modul hook_menu() függvényéből összegyűjti minden modul menüpontjait, és ebből csinál egy tömböt, aminek a kulcsa az útvonal. Az útvonalban azonban vannak helyettesítők (%), tehát pl. nem jön létre ténylegesen új menüpont minden felhasználó regisztrációjánál, hanem a felhasználó azonosítója az útvonalban levő helyettesítőre illesztődik (user/%). Ezután jönnek a modulok hook_menu_alter() függvényei, amik az előző körben összeszedett menüpontokat tudják változtatni úgy, hogy a tömb egyes elemeinek bizonyos paramétereit felülírják, és csak ezután mentődik el a végleges menü.

Na most, eMeLA ránézésre változtatni akar egy menüponton, hiszen egy létező útvonal által meghívott függvényt írna felül egy saját függvénnyel, és így a hook_menu_alter()-t kéne használnia, és a page callback-et felülírni, nem?

Nem! Ugyanis a taxonomy/term/74/0/feed útvonal konkrétan nem létezik, csak a taxonomy/term/%/%/feed, amiben ugyebár helyettesítők vannak, hiszen minden taxonomy feed-et ez állít elő. Ő viszont csak azt az egy bizonyos feed-et akarja megváltoztatni, a helyettesítők többi illeszkedését nem. És mivel a Drupal úgy működik, hogy először minden útvonalra a konkrét egyezést ellenőrzi, és csak utána kezdi a helyettesítőket nézni, így az eredeti függvény helyett, ami a helyettesítők segítségével megkapta volna paraméterként a 74-et és a 0-t, most meghívódik inkább a sajat_rss() függvény.

Tehát a látszat ellenére nem egy létező menüpont megváltoztatása történt, hanem egy új menüpont létrehozása.

Így van?

0
0

--
Csonka Gergely
http://cheppers.com

eMeLA képe

:) Az csak egy példa volt. Nekem a taxonomy/term/%/%/feed kell :))

Eddig is használtam a hook_menu()-t csak abba még nem gondoltam bele, hogy erre is használható. Eddig csak hozzáadtam új menüket.

Mindenesetre köszönöm a hozzászólásokat

0
0

...mit tudok: http://web.termuves.hu

aries képe

Ez igaz, de nem biztos, hogy ez mindig így fog maradni. Bejöhet egy újabb menu registry-implementáció, gyorstárazási mód vagy sok modul esetén a sorrendiség miatt nem biztos, hogy erre számíthatsz. A hook_menu_alter() a menü felépülésének végén hívódik meg, és módosítja a menüt.

0
0