it-swarm-eu.dev

Jaká je nejlepší metoda nahrazení tokenu v obsahu uzlu?

Jsem nováček a prohledávám fóra (včetně tohoto), knihy a dokumentaci, ale na to nemůžu najít jasnou odpověď:

Jaká je nejlepší metoda (vlastní modul? PHP v obsahu uzlu? Jiný?) Nahradit token v těle uzlu hodnotou pole vlastního uživatelského profilu?

Případ použití: Potřebuji nahradit text v externí adrese URL řetězcem specifickým pro aktuálního uživatele. Doufám, že do URL v rámci obsahu uzlu mohu vložit řetězec tokenů a nechat token nahradit zadanou hodnotou z profilu aktuálního uživatele.

Nevytvořil jsem žádné vlastní moduly, ale jsem ochoten se do toho ponořit, pokud někdo doporučí konkrétní cestu.

4
ctlarsen

Filtr tokenů

Filtr tokenů je velmi jednoduchý modul, který zpřístupňuje hodnoty tokenů jako vstupní filtr.

5
Dave Reid

Chcete-li implementovat systém nahrazení vlastních tokenů, máte dvě možnosti za předpokladu, že odkazujete na text přítomný v těle uzlu, který je třeba nahradit dynamickými hodnotami:

  • použijte modul filtru, který vám umožní definovat, který text má být nahrazen as čím
  • použijte vlastní modul, který nahradí text nalezený v těle uzlu před zobrazením uzlu

V prvním případě by byl modul filtru vyvolán také pro komentáře a filtr by nebyl schopen rozlišovat mezi nahrazováním textu v těle uzlu nebo v těle komentáře. V případě, že vám modul umožňuje definovat PHP kód spuštěný, když je v těle uzlu/komentáře nalezen konkrétní text, je zde také problém s výkonem. Místo předávání PHP kód pro eval(), bylo by lepší definovat vlastní modul, který implementuje specifický filtr, který nahradí konkrétní text, který potřebujete. Také v tomto případě by modul nemohl vědět když je vyvolán pro uzel nebo komentář, také to znamená, že modul filtru nemohl získat informace mimo argumenty dané zpětnému volání filtru, což znamená, že není schopen získat informace o autorovi uzlu, protože zpětné volání filtru nezíská žádný objekt uzlu nebo komentáře.
V případě vlastní filtr není popis daný pro vstupní formát přeložitelný; to znamená, že při přechodu z angličtiny do francouzštiny jako jazyka pro daný web (nebo zobrazený uzel) nebude popisovaný popis zobrazen ve francouzštině.

Ve druhém případě by modul implementující hook_nodeapi ('view') , v Drupal 6, mohl změnit obsah $node->content změnit tělo uzlu; podobně by modul implementující hook_node_view () dosáhl stejného výsledku v Drupal 7 a novějších verzích).
V obou případech $node->content['body'] obsahuje tělo uzlu jako pole, které se řídí formátem používaným ve formuláři API, nebo vyžaduje drupal_render () .

Povolení vstupního formátu PHP pro web, který se nepoužívá jako vývojový/testovací web), se nepovažuje za dobrý nápad. Spíše než povolení tohoto vstupního formátu je lepší implementovat vlastní modul, což je to, co byla provedena na Drupal.org, která nahradila typ obsahu pomocí vstupního formátu PHP s normálním typem obsahu) a implementovala vlastní modul pro změnu obsahu konkrétních uzlů.

2
kiamlaluno

Možná vás bude zajímat vlastní filtr .

Místo vytvoření nového modulu filtru pro každý požadovaný filtr můžete tento modul použít pro úkoly, jako je vytváření vlastních značek, nahrazování hodnot tokenů a všechny změny, které potřebujete v textu. Můžete použít jednoduché nahrazení nebo použít PHP kód pro psaní silnějších věcí (jako je použít pro highligth kód u Geshi).

1
d3l3t3m3