Autor Zpráva
martin6541
Profil
Dobrý den. Mám vytvořený modul v joomla a potřebuji v něm vypsat hodnotu vlastního meta tagu. Pokoušíms e to nějak udělat pomocí php příručky a pokusu omylu,a le nedaří se.

Mám kod:
<h1><?php  echo $tags['filtr-title'] ?></h1>
Ale nic se nezobrazí.

V kodu stránky to vypadá následovně:
<meta name="filtr-title" content="xxx" />

Mám to špatně? Nebo mi něco chybí?
Děkuji za radu
lionel messi
Profil
martin6541:

Kód modulu by sa nenašiel?

Syntakticky je to v poriadku.
anonym_
Profil *
martin6541:
Ty dva útržky kódu k sobě nepatří, nebo nedávají smysl.

Nahoře vypisuješ něco do nadpisu (H1), dole máš vypsaný meta tag, který do H1 určitě nepatří (a ten H1 v okolí ani není).
martin6541
Profil
anonym:
Ty dva útržky kódu k sobě nepatří, nebo nedávají smysl.
Vysvětlím. Tento redakční systém má velmi omezené možnosti, co se týče SEO ve filtrování. Umím si pomoci tak, že v sef komponentě mohu k dané url dopsat nespočet meta tagů. Napadlo mě tedy, že pro důležité kombinace filtrů (z pohledu analýzy klíčových slov) vytvořím vlastní meta tag ve stylu "titulek filtru" a ten pak nechám vypsat na dané url jako nadpis stránk v h1.
Proto se snažím zachránit aspoň takhle "ručně" ty nejdůležitější filtry. U malého eshopu je to reálné.


lionel messi:
Kód modulu by sa nenašiel?
<?php
/**
 * @package     Joomla.Site
 * @subpackage  mod_breadcrumbs
 *
 * @copyright   Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

JHtml::_('bootstrap.tooltip');

$app        = JFactory::getApplication();
$menuitem   = $app->getMenu()->getActive(); // get the active item
//$m_params   = $menuitem->params; // get the params Menu
//$page_title = $m_params->get('page_title','');
$arr_list = (array) $list;
$end_list = end($arr_list);
?>
<div class="navigace">
    <h1 class="navigace-title"><?php  echo $tags['filtrace-title'] ?></h1>
    <ul itemscope itemtype="https://schema.org/BreadcrumbList" class="navigace<?php echo $moduleclass_sfx; ?>">
        <?php if ($params->get('showHere', 1)) : ?>
            <li>
                <?php echo JText::_('MOD_BREADCRUMBS_HERE'); ?> 
            </li>
        <?php else : ?>
            <li class="active">
                <span class="divider icon-location"></span>
            </li>
        <?php endif; ?>

        <?php
        // Get rid of duplicated entries on trail including home page when using multilanguage
        for ($i = 0; $i < $count; $i++)
        {
            if ($i == 1 && !empty($list[$i]->link) && !empty($list[$i - 1]->link) && $list[$i]->link == $list[$i - 1]->link)
            {
                unset($list[$i]);
            }
        }

        // Find last and penultimate items in breadcrumbs list
        end($list);
        $last_item_key   = key($list);
        prev($list);
        $penult_item_key = key($list);

        // Make a link if not the last item in the breadcrumbs
        $show_last = $params->get('showLast', 1);

        // Generate the trail
        foreach ($list as $key => $item) :
            if ($key != $last_item_key) :
                // Render all but last item - along with separator ?>
                <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
                    <?php if (!empty($item->link)) : ?>
                        <a itemprop="item" href="<?php echo $item->link; ?>" class="pathway"><span itemprop="name"><?php echo $item->name; ?></span></a>
                    <?php else : ?>
                        <span itemprop="name">
                        <?php echo $item->name; ?>
                    </span>
                    <?php endif; ?>

                    <?php if (($key != $penult_item_key) || $show_last) : ?>
                        <i class="fa fa-angle-right"></i>
                    <?php endif; ?>
                    <meta itemprop="position" content="<?php echo $key + 1; ?>">
                </li>
            <?php elseif ($show_last) :
                // Render last item if reqd. ?>
                <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem" class="active">
                <span itemprop="name">
                    <?php echo $item->name; ?>
                </span>
                    <meta itemprop="position" content="<?php echo $key + 1; ?>">
                </li>
            <?php endif;
        endforeach; ?>
    </ul>
</div>



lionel messi:
Syntakticky je to v poriadku.
Snažil sme se to nějak logicky pochopit zde: www.php.net/manual/en/function.get-meta-tags.php
Ale pro mě je to jaksi nesrozumitelná řeč :)

Jinak ten modul je vlastně mnou vypocená drobečková navigace, kdy jako titulek stránky zobrazuje poslední položku z navigace a funguje skvěle. Jen u te filtrace to potřebuju vytunit.
<h1 class="navigace-title"><?php  echo $end_list->name; ?></h1>

Pokud bych si měl úplně vymýšlet, tak by bylo skvělé, kdyby to načítalo ten metatag a v případě že neexistuje, tak zobrazí tu end_list name. Myslím pomocí toho "if" a "else" ale už vůbec neumím napsat.
martin6541
Profil
Ahoj. Prozatím se mi nepodařilo problém vyřešit. Ale trošku jsem jej aktualizoval, takže to zhrnu.

Modul, ve kterém mám kod, zobrazující jako nadpis stránky poslední položku drobečkové navigace
<h1><?php  echo $end_list->name; ?></h1>

Potřebuji na jendom typu stránky udělat změnu. Jedná se o filtraci produktů.
Přidám tedy do kodu stránky vlastní meta tag:
<meta name="vlastni-h1" content="xxx" />

A chtěl bych upravit modul tak, aby v případě, že detekuje na stránce tento vlastní meta tag jej zobrazil, něco jako:
<h1><?php  echo $tags['vlastni-h1'] ?></h1>

a pokud vlastní meta tag nenajde, zobrazí původní
<h1><?php  echo $end_list->name; ?></h1>

Momentálně se mi nedaří vymyslet to podmínečné zobrazení, ale ani pohé zobrazení meta tagu jako nadpisu stránky :(
Keeehi
Profil
martin6541:
Metatag nemá s PHP nic společného. PHP ho tady nemůže detekovat. Takže ho vůbec nepoužívej. Na jeho místě můžeš zkusit dát <?php $someVariable = "xxx"; ?>

A tam kde máš h1 pak budeš mít
 <?php  echo isset($someVariable) ? $someVariable : $end_list->name; ?>

Pak budeš muset doufat, že:
1) Ten kód pro nadpis se vyhodnocuje až po kódu kde jsi definoval ten vlastní obsah.
2) Je to ve stejném kontextu, aby ta proměnná byla viditelná
3) Nepřepíšeš si tím nějakou jinou proměnnou

Ono jako všechno jde řešit, ale je potřeba alespoň trochu rozumět.

Ono by bylo mnohem lepší, než si t informaci tahat z jiné části stránky si to rozhodnout přímo na místě. Určitě to půjde z něčeho poznat, na jakém typu stránky jsi a podle toho zvolit, co do nadpisu vypsat.

Děláš úpravy na eshopu a z tvých dotazů je vidět, že tomu až tak moc nerozumíš. Jsem si jistý, že netušíš, jaké má každá z těch změn možné bezpečnostní dopady. Pořádně zvaž, jestli tě nevyjde levněji si na to najmout někoho kdo tomu rozumí. Přeci jen je to eshop a ten z povahy věci nakládá jak s penězi, tak s citlivými údaji zákazníků. Určitě nechceš, aby ti někdo ten shop hacknul.
martin6541
Profil
Keeehi:
Metatag nemá s PHP nic společného.
Aha. Já to právě chápal, že je to možné: www.php.net/manual/en/function.get-meta-tags.php
Očividně sem to ale pochopil špatně :(

Jde o to, že v SEF komponentě mohu libovolně meta tagy tvořit. Když už pro tu filtraci budu vytvářet sef url, tak jsem chtěl vytvořit lákavý nadpis stránky. A chtěl sem to přes ony meta tagy zobrazit na stránce.


Keeehi:
Děláš úpravy na eshopu a z tvých dotazů je vidět, že tomu až tak moc nerozumíš. Jsem si jistý, že netušíš, jaké má každá z těch změn možné bezpečnostní dopady. Pořádně zvaž, jestli tě nevyjde levněji si na to najmout někoho kdo tomu rozumí. Přeci jen je to eshop a ten z povahy věci nakládá jak s penězi, tak s citlivými údaji zákazníků. Určitě nechceš, aby ti někdo ten shop hacknul.

Dělám to na Joomla a eshopovém řešení Virtuemart. Téměř vše už nekdo naprogramoval a nabízí. Já se poslední dobou hodně zaměřuji na SEO. A to je velká bolest Virtuemartu.
Keeehi
Profil
martin6541:
Očividně sem to ale pochopil špatně :(
Ta funkce se ale nedá požít na aktuálně generovaný dokument. Teda ona by teoreticky možná šla ale je to drbání se levou nohou za pravým uchem. Přitom určitě existuje přímočaré řešení. Já ti ho bohužel neporadím, jelikož Joomlou/Virtuemartem nepracuji, takže neznám jeho prostředí, jak funguje, jak získat tu potřebnou informaci. Ale jsem si jistý že to tam někde lehce přístupné je.

Dělám to na Joomla a eshopovém řešení Virtuemart. Téměř vše už nekdo naprogramoval a nabízí. Já se poslední dobou hodně zaměřuji na SEO. A to je velká bolest Virtuemartu.
Já to chápu. Problém je ale že vypsání čehokoli do stránky může být potencionálně nebezpečné. Takže by se mělo vždy adekvátně ošetřit. Například <?php echo $item->name; ?> je neošetřený výstup. Já vím, ono se spoléhá na to, že ve jméně drobečkové navigace nebude nikdy nic nebezpečného, ale teoreticky může. Stačí import produktů dodavatele který byl napaden a máš to tam.
martin6541
Profil
Keeehi:
Ale jsem si jistý že to tam někde lehce přístupné je.
Konkrétně u tohoto není.

Používám toho nejlepšího dodavatele filtrace pro VM. I ten je ale z pohledu SEO značně omezen. Prakticky umí jen generovat ne-sef url a pojem jako SEO je pro něj sprosté slovo :)
Proto musím používat SEF komponentu, pomocí které alespoň ručně vytvořím 301 přesměrování na důležité kombinace filtrů s pěknou url adresou. U toho mohu vyplnit i META tagy. Ale to mi nestačí. Chtěl bych umět do stránky dostat alespoň nadpis. Ideálně popis. Už jsem se zaradoval, že ten nadpis vyřeším pomocí meta tagů. No nevyřeším. Tak musím hledat dál.

Samozřejmě, že nejprve jsem kontaktoval výrobce filtrace. Poté Joomla a VM komunitu. No vypadá to, že SEO se tam moc lidí nevěnuje a vystačí si s málem.

Problém je taky ten, že eshop je malý, levný a nemohu si enchat platit programátory za statisíce. Jen se prostě snařžím ho vylepšit.
Keeehi
Profil
Konkrétně u tohoto není.
Ale je. Schválně si zkus do kódu dát
var_dump(JFactory::getApplication()); exit;
Objeví se ti obrovské množství informací které jsou "aktuálně dostupné". To že o tom nevíš ještě neznamená, že to tam není.

Problém je taky ten, že eshop je malý, levný a nemohu si enchat platit programátory za statisíce.
Jistě. Dá se ale taky sehnat student za pár stovek. Což je pořád ta lepší varianta. Navíc tím že to udělá někdo místo tebe, ty získáš čas, který můžeš věnovat něčemu jinému, co ti jde.
Dělej ale jak myslíš. Jen aby tě to pak nevyšlo dráž na pokutách od ÚOOÚ, pokud ti to někdo hackne.
martin6541
Profil
Keeehi:
Asi jsme si nerozuměli.
To není jsem měl na mysli, že neexistuje žádné hotové řešení, které by řešilo můj problém se SEo ve filtraci a mohl jsem ho koupit.
Jak jsem psal, oslovils em dostupná fora a nikdo se nenabídnul. Dnes jsou asi vytížení i studenti. Zkoušel jsem zoufale oslovit i napřímo, ale bez odpovědi.

Přiznávám, že ideální y bylo, kdyby to implementoval výtrobce filtrace. Ten ale nechce. V komunitě VM to nikdo neřeší, krom jednoho člověka, který se na to dotazoval před pár dny. Už jsem ho oslovil, že máme stejný problém, jestli nebudeme spolupracovat na řešení.

Ještě jednou díky, žes mi vysvětlil, že toto je slepá cesta. byť po mě by byla asi ideální.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0