• User

    Codice php per evitare la pubblicazione doppia dei tag h1 nelle pagine/articoli

    Ciao a tutti, spero sia la sezione giusta, vorrei sapere cortesemente come fare per evitare la pubblicazione doppia dei tag h1 negli articoli/pagine (per ora l'h2 del 2° blocco l'ho sostituito con h1) partendo da questi blocchi di codice php:

    <?php if ($this->params->get('show_page_heading')) : ?>
        <div class="page-header">
            <h1> <?php echo $this->escape($this->params->get('page_heading')); ?> </h1>
        </div>
    

    e

    <?php if ($params->get('show_title')) : ?>
              <h2 itemprop="headline">
                  <?php echo $this->escape($this->item->title); ?>
              </h2>
    

    Grazie


  • User

    Ci vorrebbe anche una condizione per cui se un tag h1 viene pubblicato dalle impostazioni menu, categorie ed articoli ne permetta solo uno dei 3.


  • User Attivo

    In realtà non ho capito la richiesta..
    Puoi spiegare meglio, con degli esempi magari.

    Parli di WP?


  • User

    No, mi riferisco a Joomla!, scusami.

    Cerco di spiegarmi dopo che ho rivisto titoli articoli, home e categorie poichè con le varie impostazioni non era possibile senza intervenire direttamente sulla formattazione articoli non pubblicando il titolo e riportarlo nel testo in h1:

    • per default joomla! 3 pubblica i titoli articoli della pagina principale in h1 (non ricordo se anche quelli dai menu top)
    • pubblica i titoli degli articoli in h2
    • i titoli delle categorie sono pubblicati in h1

    ora per ovviare ho eliminato il blocco il 1° blocco:

    <?php if ($this->params->get('show_page_heading')) : ?>
        <div class="page-header">
            <h1> <?php echo $this->escape($this->params->get('page_heading')); ?> </h1>
        </div>
    

    e lasciando il 2° blocco sostituendo solo il tag h2 con h1 come si vede:

    <?php if ($params->get('show_title')) : ?>
                <h1 itemprop="headline">
                    <?php echo $this->escape($this->item->title); ?>
                </h1>
    

    Anche per eliminare il logo e descrizione in cima avevo eliminato un pezzo per sistemare come volevo, idem per le info del template, immagino che per tutti e 3 casi ci sia un modo per dire, non pubblicare questo se inserisco/attivo questo altro logo, impostazione h1 su tutto se decido sulle singole impostazioni, non pubblicate le info se inserisco chessò una descrizione personale, insomma per evitare di tagliare a muzzo parti di codice inserendo delle istruzioni/condizioni come gia ci sono per altri parametri.

    Riporto sotto l'index.php originale e quello modificato per così dire, per capire se si può fare e come da nubbio.

    L'originale:

    <?php
    /**
     * @package     Joomla.Site
     * @subpackage  Templates.protostar
     *
     * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
     * @license     GNU General Public License version 2 or later; see LICENSE.txt
     */
    
    defined('_JEXEC') or die;
    
    /** @var JDocumentHtml $this */
    
    $app  = JFactory::getApplication();
    $user = JFactory::getUser();
    
    // Output as HTML5
    $this->setHtml5(true);
    
    // Getting params from template
    $params = $app->getTemplate(true)->params;
    
    // Detecting Active Variables
    $option   = $app->input->getCmd('option', '');
    $view     = $app->input->getCmd('view', '');
    $layout   = $app->input->getCmd('layout', '');
    $task     = $app->input->getCmd('task', '');
    $itemid   = $app->input->getCmd('Itemid', '');
    $sitename = $app->get('sitename');
    
    if ($task === 'edit' || $layout === 'form')
    {
        $fullWidth = 1;
    }
    else
    {
        $fullWidth = 0;
    }
    
    // Add JavaScript Frameworks
    JHtml::_('bootstrap.framework');
    
    // Add template js
    JHtml::_('script', 'template.js', array('version' => 'auto', 'relative' => true));
    
    // Add html5 shiv
    JHtml::_('script', 'jui/html5.js', array('version' => 'auto', 'relative' => true, 'conditional' => 'lt IE 9'));
    
    // Add Stylesheets
    JHtml::_('stylesheet', 'template.css', array('version' => 'auto', 'relative' => true));
    JHtml::_('stylesheet', 'templatepers.css', array('version' => 'auto', 'relative' => true));
    
    // Use of Google Font
    if ($this->params->get('googleFont'))
    {
        JHtml::_('stylesheet', '//fonts.googleapis.com/css?family=' . $this->params->get('googleFontName'));
        $this->addStyleDeclaration("
        h1, h2, h3, h4, h5, h6, .site-title {
            font-family: '" . str_replace('+', ' ', $this->params->get('googleFontName')) . "', sans-serif;
        }");
    }
    
    // Template color
    if ($this->params->get('templateColor'))
    {
        $this->addStyleDeclaration('
        body.site {
            border-top: 3px solid ' . $this->params->get('templateColor') . ';
            background-color: ' . $this->params->get('templateBackgroundColor') . ';
        }
        a {
            color: ' . $this->params->get('templateColor') . ';
        }
        .nav-list > .active > a,
        .nav-list > .active > a:hover,
        .dropdown-menu li > a:hover,
        .dropdown-menu .active > a,
        .dropdown-menu .active > a:hover,
        .nav-pills > .active > a,
        .nav-pills > .active > a:hover,
        .btn-primary {
            background: ' . $this->params->get('templateColor') . ';
        }');
    }
    
    // Check for a custom CSS file
    JHtml::_('stylesheet', 'user.css', array('version' => 'auto', 'relative' => true));
    
    // Check for a custom js file
    JHtml::_('script', 'user.js', array('version' => 'auto', 'relative' => true));
    
    // Load optional RTL Bootstrap CSS
    JHtml::_('bootstrap.loadCss', false, $this->direction);
    
    // Adjusting content width
    if ($this->countModules('position-7') && $this->countModules('position-8'))
    {
        $span = 'span6';
    }
    elseif ($this->countModules('position-7') && !$this->countModules('position-8'))
    {
        $span = 'span9';
    }
    elseif (!$this->countModules('position-7') && $this->countModules('position-8'))
    {
        $span = 'span9';
    }
    else
    {
        $span = 'span12';
    }
    
    // Logo file or site title param
    if ($this->params->get('logoFile'))
    {
        $logo = '<img src="' . JUri::root() . $this->params->get('logoFile') . '" alt="' . $sitename . '" />';
    }
    elseif ($this->params->get('sitetitle'))
    {
        $logo = '<span class="site-title" title="' . $sitename . '">' . htmlspecialchars($this->params->get('sitetitle'), ENT_COMPAT, 'UTF-8') . '</span>';
    }
    else
    {
        $logo = '<span class="site-title" title="' . $sitename . '">' . $sitename . '</span>';
    }
    ?>
    <!DOCTYPE html>
    <html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>">
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <jdoc:include type="head" />
    </head>
    <body class="site <?php echo $option
        . ' view-' . $view
        . ($layout ? ' layout-' . $layout : ' no-layout')
        . ($task ? ' task-' . $task : ' no-task')
        . ($itemid ? ' itemid-' . $itemid : '')
        . ($params->get('fluidContainer') ? ' fluid' : '');
        echo ($this->direction === 'rtl' ? ' rtl' : '');
    ?>">
        <!-- Body -->
        <div class="body" id="top">
            <div class="container<?php echo ($params->get('fluidContainer') ? '-fluid' : ''); ?>">
                <!-- Header -->
                <header class="header" role="banner">
                    <div class="header-inner clearfix">
                        <a class="brand pull-left" href="<?php echo $this->baseurl; ?>/">
                        <div class="header-search pull-right">
                            <jdoc:include type="modules" name="position-0" style="none" />
                        </div>
                    </div>
                </header>
                <?php if ($this->countModules('position-1')) : ?>
                    <nav class="navigation" role="navigation">
                        <div class="navbar pull-left">
                            <a class="btn btn-navbar collapsed" data-toggle="collapse" data-target=".nav-collapse">
                                <span class="element-invisible"><?php echo JTEXT::_('TPL_PROTOSTAR_TOGGLE_MENU'); ?></span>
                                <span class="icon-bar"></span>
                                <span class="icon-bar"></span>
                                <span class="icon-bar"></span>
                            </a>
                        </div>
                        <div class="nav-collapse">
                            <jdoc:include type="modules" name="position-1" style="none" />
                        </div>
                    </nav>
                <?php endif; ?>
                <jdoc:include type="modules" name="banner" style="xhtml" />
                <div class="row-fluid">
                    <?php if ($this->countModules('position-8')) : ?>
                        <!-- Begin Sidebar -->
                        <div id="sidebar" class="span3">
                            <div class="sidebar-nav">
                                <jdoc:include type="modules" name="position-8" style="well" />
                            </div>
                        </div>
                        <!-- End Sidebar -->
                    <?php endif; ?>
                    <main id="content" role="main" class="<?php echo $span; ?>">
                        <!-- Begin Content -->
                        <jdoc:include type="modules" name="position-3" style="xhtml" />
                        <jdoc:include type="message" />
                        <jdoc:include type="component" />
                        <jdoc:include type="modules" name="position-2" style="none" />
                        <!-- End Content -->
                    </main>
                    <?php if ($this->countModules('position-7')) : ?>
                        <div id="aside" class="span3">
                            <!-- Begin Right Sidebar -->
                            <jdoc:include type="modules" name="position-7" style="well" />
                            <!-- End Right Sidebar -->
                        </div>
                    <?php endif; ?>
                </div>
            </div>
        </div>
        <!-- Footer -->
        <footer class="footer" role="contentinfo">
            <div class="container<?php echo ($params->get('fluidContainer') ? '-fluid' : ''); ?>">
                <hr />
                <jdoc:include type="modules" name="footer" style="none" />
            </div>
        </footer>
        <jdoc:include type="modules" name="debug" style="none" />
    </body>
    </html>
    
    
    

    Quello modificato:

    <?php
    /**
     * @package     Joomla.Site
     * @subpackage  Templates.protostar
     *
     * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
     * @license     GNU General Public License version 2 or later; see LICENSE.txt
     */
    
    defined('_JEXEC') or die;
    
    /** @var JDocumentHtml $this */
    
    $app  = JFactory::getApplication();
    $user = JFactory::getUser();
    
    // Output as HTML5
    $this->setHtml5(true);
    
    // Getting params from template
    $params = $app->getTemplate(true)->params;
    
    // Detecting Active Variables
    $option   = $app->input->getCmd('option', '');
    $view     = $app->input->getCmd('view', '');
    $layout   = $app->input->getCmd('layout', '');
    $task     = $app->input->getCmd('task', '');
    $itemid   = $app->input->getCmd('Itemid', '');
    $sitename = $app->get('sitename');
    
    if ($task === 'edit' || $layout === 'form')
    {
        $fullWidth = 1;
    }
    else
    {
        $fullWidth = 0;
    }
    
    // Add JavaScript Frameworks
    JHtml::_('bootstrap.framework');
    
    // Add template js
    JHtml::_('script', 'template.js', array('version' => 'auto', 'relative' => true));
    
    // Add html5 shiv
    JHtml::_('script', 'jui/html5.js', array('version' => 'auto', 'relative' => true, 'conditional' => 'lt IE 9'));
    
    // Add Stylesheets
    JHtml::_('stylesheet', 'template.css', array('version' => 'auto', 'relative' => true));
    JHtml::_('stylesheet', 'templatepers.css', array('version' => 'auto', 'relative' => true));
    
    // Use of Google Font
    if ($this->params->get('googleFont'))
    {
        JHtml::_('stylesheet', '//fonts.googleapis.com/css?family=' . $this->params->get('googleFontName'));
        $this->addStyleDeclaration("
        h1, h2, h3, h4, h5, h6, .site-title {
            font-family: '" . str_replace('+', ' ', $this->params->get('googleFontName')) . "', sans-serif;
        }");
    }
    
    // Template color
    if ($this->params->get('templateColor'))
    {
        $this->addStyleDeclaration('
        body.site {
            border-top: 3px solid ' . $this->params->get('templateColor') . ';
            background-color: ' . $this->params->get('templateBackgroundColor') . ';
        }
        a {
            color: ' . $this->params->get('templateColor') . ';
        }
        .nav-list > .active > a,
        .nav-list > .active > a:hover,
        .dropdown-menu li > a:hover,
        .dropdown-menu .active > a,
        .dropdown-menu .active > a:hover,
        .nav-pills > .active > a,
        .nav-pills > .active > a:hover,
        .btn-primary {
            background: ' . $this->params->get('templateColor') . ';
        }');
    }
    
    // Check for a custom CSS file
    JHtml::_('stylesheet', 'user.css', array('version' => 'auto', 'relative' => true));
    
    // Check for a custom js file
    JHtml::_('script', 'user.js', array('version' => 'auto', 'relative' => true));
    
    // Load optional RTL Bootstrap CSS
    JHtml::_('bootstrap.loadCss', false, $this->direction);
    
    // Adjusting content width
    if ($this->countModules('position-7') && $this->countModules('position-8'))
    {
        $span = 'span6';
    }
    elseif ($this->countModules('position-7') && !$this->countModules('position-8'))
    {
        $span = 'span9';
    }
    elseif (!$this->countModules('position-7') && $this->countModules('position-8'))
    {
        $span = 'span9';
    }
    else
    {
        $span = 'span12';
    }
    
    // Logo file or site title param
    if ($this->params->get('logoFile'))
    {
        $logo = '<img src="' . JUri::root() . $this->params->get('logoFile') . '" alt="' . $sitename . '" />';
    }
    elseif ($this->params->get('sitetitle'))
    {
        $logo = '<span class="site-title" title="' . $sitename . '">' . htmlspecialchars($this->params->get('sitetitle'), ENT_COMPAT, 'UTF-8') . '</span>';
    }
    else
    {
        $logo = '<span class="site-title" title="' . $sitename . '">' . $sitename . '</span>';
    }
    ?>
    <!DOCTYPE html>
    <html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>">
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <jdoc:include type="head" />
    </head>
    <body class="site <?php echo $option
        . ' view-' . $view
        . ($layout ? ' layout-' . $layout : ' no-layout')
        . ($task ? ' task-' . $task : ' no-task')
        . ($itemid ? ' itemid-' . $itemid : '')
        . ($params->get('fluidContainer') ? ' fluid' : '');
        echo ($this->direction === 'rtl' ? ' rtl' : '');
    ?>">
        <!-- Body -->
        <div class="body" id="top">
            <div class="container<?php echo ($params->get('fluidContainer') ? '-fluid' : ''); ?>">
                <!-- Header -->
                <header class="header" role="banner">
                    <div class="header-inner clearfix">
                        <a class="brand pull-left" href="<?php echo $this->baseurl; ?>/">
                        <div class="header-search pull-right">
                            <jdoc:include type="modules" name="position-0" style="none" />
                        </div>
                    </div>
                </header>
                <?php if ($this->countModules('position-1')) : ?>
                    <nav class="navigation" role="navigation">
                        <div class="navbar pull-left">
                            <a class="btn btn-navbar collapsed" data-toggle="collapse" data-target=".nav-collapse">
                                <span class="element-invisible"><?php echo JTEXT::_('TPL_PROTOSTAR_TOGGLE_MENU'); ?></span>
                                <span class="icon-bar"></span>
                                <span class="icon-bar"></span>
                                <span class="icon-bar"></span>
                            </a>
                        </div>
                        <div class="nav-collapse">
                            <jdoc:include type="modules" name="position-1" style="none" />
                        </div>
                    </nav>
                <?php endif; ?>
                <jdoc:include type="modules" name="banner" style="xhtml" />
                <div class="row-fluid">
                    <?php if ($this->countModules('position-8')) : ?>
                        <!-- Begin Sidebar -->
                        <div id="sidebar" class="span3">
                            <div class="sidebar-nav">
                                <jdoc:include type="modules" name="position-8" style="well" />
                            </div>
                        </div>
                        <!-- End Sidebar -->
                    <?php endif; ?>
                    <main id="content" role="main" class="<?php echo $span; ?>">
                        <!-- Begin Content -->
                        <jdoc:include type="modules" name="position-3" style="xhtml" />
                        <jdoc:include type="message" />
                        <jdoc:include type="component" />
                        <jdoc:include type="modules" name="position-2" style="none" />
                        <!-- End Content -->
                    </main>
                    <?php if ($this->countModules('position-7')) : ?>
                        <div id="aside" class="span3">
                            <!-- Begin Right Sidebar -->
                            <jdoc:include type="modules" name="position-7" style="well" />
                            <!-- End Right Sidebar -->
                        </div>
                    <?php endif; ?>
                </div>
            </div>
        </div>
        <!-- Footer -->
        <footer class="footer" role="contentinfo">
            <div class="container<?php echo ($params->get('fluidContainer') ? '-fluid' : ''); ?>">
                <hr />
                <jdoc:include type="modules" name="footer" style="none" />
            </div>
        </footer>
        <jdoc:include type="modules" name="debug" style="none" />
    </body>
    </html>
    
    
    

    Grazie.


  • User Attivo

    Se ho capito bene quello che vuoi fare della index non hai bisogno.
    Ma devi modificare quella porzione di codice che stai incollando:

    Primo passo vai a riaggiungere questo blocco che hai eliminato:
    [PHP]
    <?php if ($this->params->get('show_page_heading')) : ?>
    <div class="page-header">
    <h1> <?php echo $this->escape($this->params->get('page_heading')); ?> </h1>
    </div>
    [/PHP]

    Lasciandolo h1, così quando nel menù lo attivi si vede in h1.

    Secondo passo modificare l'altro blocco così:
    [PHP]
    <?php if ($params->get('show_title') && $this->params->get('show_page_heading')): ?>
    <h2 itemprop="headline">
    <?php echo $this->escape($this->item->title); ?>
    </h2>
    <?php elseif ($params->get('show_title')): ?>
    <h1 itemprop="headline">
    <?php echo $this->escape($this->item->title); ?>
    </h1>
    <?php endif; ?>
    [/PHP]

    Primo "if": controlla se entrambi sono attivi, in quel caso genera l'h2 perchè h1 dovrebe già essere il primo.
    "Elseif": se c'è solamente uno allora lo fa in h1.

    Non so se mi sono spiegato bene perchè non era semplice da scrivere ahah
    Fammi sapere 🙂


  • User

    Grazie per la preziosa indicazione, qualcosa però non quadra, ho provato tutte le opzioni disponibili, ho un po di confusionee riproverò, per ora mi risulta così:
    Il titolo h1 delle categorie permane anche se disattivato su menu, su articolo, su categorie e su categorie principali, mi va bene quando visualizzo la categoria con la lista degli articoli dalla voce menu, ma non quando clicco sui singoli articoli no perchè l'h1 della categoria prevale su quella degli articoli in barba alle impostazioni.

    La home da menu top impostato su mostra titolo, pubblica in h2 invece che in h1 a meno che imposto attivo su visualizzazione pagina riportando il titolo articolo e lo fa in h1.

    Vorrei che i titoli di tutti gli articoli fossero in h1 incluso il titolo della categoria richiamata da menu ma appunto quando si va ad aprire uno degli articoli da quella pagina, automaticamente vorrei scomparisse l'h1 titolo categoria in favore dell'h1 dell'articolo.

    Ho fatto degli screenshot per ricordarmi.


  • User Attivo

    Se ho capito bene tu vuoi che:

    1. Al visualizzare la categoria con la tabellina degli articoli all'interno il titolo della pagina (nome categoria) sia in <h1>.
    2. Al click su uno degli articoli si entra nella pagina dove a questo punto ad essere <h1> è il titolo dell'articolo stesso non più della categoria, trasformando così quest'ultima in <h2>.
    3. All'apertura di qualsiasi articolo, sia esso pubblicato sul menu principale che link diretto, il suo titolo sia <h1>.

    Se è tutto corretto ciò che ho scritto ecco a te le modifiche da apportare alle stesse righe di codice di prima:

    Il primo blocco:
    [PHP]
    <?php if ($this->params->get('show_page_heading')) : ?>
    <div class="page-header">
    <?php $tag = ($this->escape($this->params->get('page_heading')) == $this->item->category_title ? 'h2' : 'h1') ?>
    <<?php echo $tag; ?>> <?php echo $this->escape($this->params->get('page_heading')); ?> </<?php echo $tag; ?>>
    </div>
    [/PHP]

    Il Secondo blocco:
    [PHP]
    <?php if ($params->get('show_title') && $this->params->get('show_page_heading')): ?>
    <?php $tag = ($this->escape($this->params->get('page_heading')) == $this->item->title ? 'h2' : 'h1') ?>
    <<?php echo $tag; ?> itemprop="headline">
    <?php echo $this->escape($this->item->title); ?>
    </<?php echo $tag; ?>>
    <?php elseif ($params->get('show_title')): ?>
    <h1 itemprop="headline">
    <?php echo $this->escape($this->item->title); ?>
    </h1>
    <?php endif; ?>
    [/PHP]

    Prova così, sono soluzioni arrangiate in quanto non conosco bene il ragionamento tuo, però prova 🙂


  • User

    Ciao! al punto 2 in realtà il titolo categoria vorrei scomparisse all'apertura dell'articolo (tutti i miei articoli iniziano con h2), provando dalle pagine categorie con lista articoli, all'apertura degli articoli mi visualizza 2 h1 e qui non posso intervenire sulle opzioni.

    Sui singoli articoli invece richiamati dai menu mi ritrovo con 2 h2 di cui uno dell'articolo poichè li inizio sempre con h2, anche se dalle opzioni menu disattivo la viusalizzazione titolo non ha alcun effetto e permane mentre sparisce se disattivo dall'articolo (ma qui mi sembra normale), il che può andare bene se i titoli sono i medesimi su menu ed articolo.

    In sostanza mi pare che se si riesce a correggere al punto 2 vada bene.

    Grazie

    PS. Ad ogni F5 disabilito cache e la pulisco.