Přihlásit se

Joomla 5.1.0 a Joomla 4.4.4 (17 dub 2024)

Dnes byla uvolněna nová verze Joomla 5.1.0, společně s Joomla 4.4.4. Tato verze přináší spoustu nových funkcí, vylepšení v oblasti bezpečnosti a kódu a díky těmto vylepšením i vyšší rychlost.

<t-itle> v kódu stránky

08. zář 2019 17:45 - 08. zář 2019 17:54 #140669
Odpověď od Rudolf
Joomla Expert
Ernste,

mě je to jasné od začátku, ale logika Vaše je špatná.

Joomla poskytuje jen framework a zobrazuje to co má každá app/modul/plugin naprogramované.
Vypínat její základní funkce je nesmysl.
K2 je jen malý pidižvík co se v Joomle používá, takže správná logika je přeprogramovat K2.

Já jsem po Vás chtěl URL a informaci, že Joomla ve spojení s K2 duplikuje title.

Protože se pořád bráníte, donutil jste mně nainstalovat si K2 a oveřit si, že mám pravdu.
Na položce item K2 se žádné duplicitní title nezobrazuje.

Takže není třeba hackovat Joomla, ale je třeba hackovat K2.

Pokud je komponenta správně napsaná, generuje sama informaci co se má do titulku vložit a joomla jen tuto informaci vezme a vyrenderuje.

No a pokud znáte funkcionalitu Joomla MVC (viz dokukmentace Joomla), jste již jen krůček od pochopení správné logiky a tudíž nalezení místa, co máte upravit.

Já nejsem programátor, ale zkusil jsem podle této logiky postupovat a našel jsem tohle:

K2 item generuje

- metatitle
- title
- a pozor, také og:title

Tyto informace by se podle správného programování měly generovat na několika místech, ale nejlépe ve view.html daného zobrazení.

Pokud se bavíme o zobrazení (view) ITEM, je třeba tedy hledat zde:
Code:
components/com_k2/views/item/view.html.php

Zde najdete všechny potřebné kódy pro to aby jste stávající titulek položky vyměnil za svůj vlastní (například za obsah dodatečného pole),

TITLE:
Najdete od řádku 357 == // Set page title

Nejprve do parametru renderovaného dokumentu přidáte titulek pomocí příkazu set (zde např.):
Code:
($params->set('page_title', $item->cleanTitle);

aby jste ho následně definoval do dokumentu jako titulek:
Code:
$document->setTitle($params->get('page_title'));

METATITLE
Najdete od řádku 397 == // Set metadata

OG:TITLE
Najdete od řádku 456 == // Set Facebook meta data



Ukázka:
kolopark.easy.minion.cz/testovaci-clanek

MiniJoomla! - www.minijoomla.org - eshop s rozšířením Joomla/VM
Email Manager - aplikace na správu šablon emailů pro VirtueMart
Easy Feeder - aplikace na generování XML/CSV feedů a napojení na ERP pro VM
PragueClassicconcert - portál pro prodej vstupenek na systému Joomla
Poděkovali: Ernst

08. zář 2019 20:00 - 08. zář 2019 20:06 #140671
Odpověď od H13
Admin
Pokud se vkládá novej "title" přes Joomla! document metodu, pak se neduplikuje, ale přepisuje. A pokud někdo nechce zasahovat do komponenty a někde si vést seznam změn, může to udělat přes systémovej plugin. Pokud se nahrazuje "title" např. něčím neměnným, je to celkem v pohodě, pokud už tam musí být nějaká logika, která vychází z url, pak to samozřejmě bude trochu více náročnější na prostředky, ale člověk pak nemusí při každým upgradu hlídat změny v core nebo v komponentě:
Code:
function onBeforeRender() { $document = JFactory::getDocument(); // Zde je místo pro vytvoření nového title // a) může to být něco neměnného // b) může se pracovat s aktuálním title, je v proměnné: $document->title // c) nebo na základě URL a jeho parametrů se lze např. zeptat databáze, atd. atd. $newTitle = "New Title"; $document->setTitle(htmlspecialchars($newTitle)); }


Phoca Cart - www.phoca.cz/phocacart - e-shop, e-commerce
Phoca Gallery - www.phoca.cz/phocagallery - obrázková galerie
Phoca Download - www.phoca.cz/phocadownload - stahování souborů
Phoca Guestbook - www.phoca.cz/phocaguestbook - guestbook

08. zář 2019 20:20 - 08. zář 2019 20:23 #140672
Odpověď od Ernst
Joomla Expert
máš naprostou pravdu, že já jsem hledal co nejjednodušší řešení, ty uvádíš správné.

rád bych použil to tvoje, ale má to svá ale, kterým nerozumím a možná mi vysvětlíš.

To řešení v K2 (jak jsi zde psal), jsem si vyzkoušel a je to ok. Ale v tomto případě to musím změnit i v klasickém content (článcích) protože ty jsou na stránkách taky. A pak jsou tam i nějaké komponenty, které s title vůbec nepracují.
Jak tohle řešit?

Můj nápad byl to pro vše odstranit a řídit si title sám. V K a článcíchj si to doprogaramovat na jiných stránkách si title i description doplnit na stránky v modulu na hraném do head.

To H13, to co popisuješ, je super, ale bohužel takhle daleko moje znalosti nesahají, mohl by jsi mi to blíže vysvětlit?

dík

08. zář 2019 20:56 - 08. zář 2019 20:58 #140673
Odpověď od H13
Admin

Ernst napsal: To H13, to co popisuješ, je super, ale bohužel takhle daleko moje znalosti nesahají, mohl by jsi mi to blíže vysvětlit?


Místo toho, aby jsi dělal modifikace do každý komponenty, nebo do core Joomly!, je můžeš udělat jednou v tvým pluginu, kterej si prostě zapneš/vypneš/nainstaluješ/odinstaluješ podle potřeby.

Systémovej plugin v podstatě může přepsat cokoliv na stránce. Většinou obsahuje dva soubory: php a xml (php s kódem, který se vykonává, xml s definicí a informací o pluginu).

Pokud by jsi ho vytvářel, stačí vzít nějajej stávající plugin a prostě ho zkopírovat a modifikovat podle svých potřeb. Můžeš se např. podívat na systémovej plugin Phoca Upgrade - www.phoca.cz/phoca-upgrade-system-plugin - ten se snaží přepsat bootstrap 2 výstup na bootstrap 3. Podobně tak můžeš postupovat při přepisování title.

V Joomla! dokumentaci si najdeš metody systémovejch pluginů. Jednou z nich je např:
Code:
function onBeforeRender() {

Prostě meníš kód ještě před vykreslením.

V tvým případě stačí jedna methoda, a to ta onBeforeRender()

A jakmile takovej plugin bude nainstalovanej a zapnutej, pak se jeho metoda onBeforeRender provádí při každým zobrazování jakýkoliv stránky v Joomle!

Má to výhody i nevýhody:

- Na jednom místě můžeš ovlivňovat veškerý výstup pro všechny části systému (články, k2, galerie, atd.)
- Ale protože to není v každý komponentě, nemáš tam např. proměnný z každý komponenty. Např. systémovej plugin při zobrazení článku nemá údaje o článku. Ty má jen content plugin. Jenže content plugin pracuje vždy jen ve článcích, už by nejel v k2, galerii, atd.

Proto je otázka, co se má dát do title. Pokud by to byla konstanta, nebo nějaká proměnná stejné pro všechny části (kterou by jsi např. dostal z databáze), pak je system plugin Ok. Pokud by ale byl pro každou část jinej - např. z článku by bral to, z galerie něco jinýho, z K2 taky, pak to bude složitější.

Pokud si ale systémovej plugin už jednou vytvoříš, pak ho můžeš používat všude a můžeš do něj přidávat různý nový vlastnosti, včetně parametrů, atd.

Phoca Cart - www.phoca.cz/phocacart - e-shop, e-commerce
Phoca Gallery - www.phoca.cz/phocagallery - obrázková galerie
Phoca Download - www.phoca.cz/phocadownload - stahování souborů
Phoca Guestbook - www.phoca.cz/phocaguestbook - guestbook
Poděkovali: Ernst

08. zář 2019 21:29 #140674
Odpověď od Ernst
Joomla Expert
díky moc za vysvětlení, jak zbyde čas, vyzkouším to

09. zář 2019 08:47 #140675
Odpověď od Rudolf
Joomla Expert

To řešení v K2 (jak jsi zde psal), jsem si vyzkoušel a je to ok. Ale v tomto případě to musím změnit i v klasickém content (článcích) protože ty jsou na stránkách taky. A pak jsou tam i nějaké komponenty, které s title vůbec nepracují.
Jak tohle řešit?


Ale to nebylo součástí původního dotazu, jinak bych navrhl jiné řešení...

Tohle mi dělají zákazníci taky. V půlce projektu si jakoby náhodou vzpomenou že ještě to a ještě to. A myslí si že to je jen drobnost. A přitom to věděli hned, jen se báli to říct aby to nestálo víc.
Nechápu proč je třeba měnit něco v content článcích, které neobsahují extra pole z K2 a vůbec jak souvisí s K2.
A taky nechápu jak s tím souvisí jiné aplikace.

Pokud je třeba na webu ještě něco jiného, myslím že by stálo za to příště odhalit o jakýn web jde a co je cílem.
Neúplné zadání - jen jsem ztreatil zbytečně čas.

Použít systémový plugin je totiž taky možnost, jen se musí zase vědět proč a jak ho správně použít == opět jsme u zadání.

MiniJoomla! - www.minijoomla.org - eshop s rozšířením Joomla/VM
Email Manager - aplikace na správu šablon emailů pro VirtueMart
Easy Feeder - aplikace na generování XML/CSV feedů a napojení na ERP pro VM
PragueClassicconcert - portál pro prodej vstupenek na systému Joomla
Poděkovali: Ernst

Powered by Fórum