web-dev-qa-db-fra.com

Ignorer la liste de catégories du formulaire d’élément frontal K2

J'ai écrasé un élément K2 Frontend

J'ai fait une copie de

components/com_k2/templates/default/itemform.php

à

templates/YOUR TEMPLATE/html/com_k2/SUBTEMPLATE NAME/itemform.php

Basé sur les instructions ici https://stackoverflow.com/questions/8623310/joomla-k2-frontend-page-modification

mais maintenant, je dois remplacer la liste de catégories affichée sur ce formulaire.

                            <tr>
                                <td class="adminK2LeftCol">
                                    <label><?php echo JText::_('K2_CATEGORY'); ?></label>
                                </td>
                                <td class="adminK2RightCol">
                                    <?php echo $this->lists['categories']; ?>
                                </td>
                            </tr>

Le menu item est configuré pour permettre aux utilisateurs de créer des images uniquement dans quelques catégories. Le formulaire ne permet pas dans les autres. Mais je souhaite que la liste des catégories n’affiche que les catégories autorisées au lieu de toutes les catégories du site.

Le résultat HTML est que les catégories non autorisées ont un disabled="disabled"

                                <td class="adminK2LeftCol">
                                    <label>Categoria</label>
                                </td>
                                <td class="adminK2RightCol">
                                    <select id="catid" name="catid">
<option value="0">- Selecionar categoria -</option>
<option style="color: rgb(128, 128, 128);" value="1" disabled="disabled">Notícias</option>
<option style="color: rgb(128, 128, 128);" value="2" disabled="disabled">- - - Estado</option>
<option style="color: rgb(128, 128, 128);" value="3" disabled="disabled">- - - Política</option>
<option style="color: rgb(128, 128, 128);" value="4" disabled="disabled">- - - Esporte</option>
<option style="color: rgb(128, 128, 128);" value="27" disabled="disabled">- - - Policia</option>
<option style="color: rgb(128, 128, 128);" value="28" disabled="disabled">- - - Municípios</option>
<option style="color: rgb(128, 128, 128);" value="29" disabled="disabled">- - - Cultura</option>
<option style="color: rgb(128, 128, 128);" value="41" disabled="disabled">- - - Nacional</option>
<option style="color: rgb(128, 128, 128);" value="5" disabled="disabled">Colunas</option>
<option style="color: rgb(128, 128, 128);" value="6" disabled="disabled">- - - Trocando em miúdos</option>
<option style="color: rgb(128, 128, 128);" value="15" disabled="disabled">- - - Espaço da Cidadania</option>
<option style="color: rgb(128, 128, 128);" value="37" disabled="disabled">- - - Karine Rosa</option>
<option style="color: rgb(128, 128, 128);" value="7" disabled="disabled">- - - Colunistas</option>
<option style="color: rgb(128, 128, 128);" value="8" disabled="disabled">- - - - - Planeta vivo</option>
<option style="color: rgb(128, 128, 128);" value="13" disabled="disabled">- - - - - Economia</option>
<option style="color: rgb(128, 128, 128);" value="14" disabled="disabled">- - - - - Gastronomia</option>
<option style="color: rgb(128, 128, 128);" value="17" disabled="disabled">- - - - - Atualize</option>
<option style="color: rgb(128, 128, 128);" value="18" disabled="disabled">- - - - - Cultura Dinâmica</option>
<option style="color: rgb(128, 128, 128);" value="19" disabled="disabled">- - - - - Espaço Acadêmico</option>
<option style="color: rgb(128, 128, 128);" value="22" disabled="disabled">- - - - - Nosso direito</option>
<option style="color: rgb(128, 128, 128);" value="23" disabled="disabled">- - - - - Quebra galho</option>
<option style="color: rgb(128, 128, 128);" value="24" disabled="disabled">- - - - - Tecnologia</option>
<option style="color: rgb(128, 128, 128);" value="25" disabled="disabled">- - - - - Moda [**Categoria não publicada**]</option>
<option value="10" selected="selected">Classificados</option>
<option value="30">- - - Imóveis</option>
<option value="11">- - - - - Venda</option>
<option value="12">- - - - - Compra</option>
<option value="31">- - - Automóveis</option>
<option value="32">- - - - - Compra</option>
<option value="33">- - - - - Venda</option>
<option style="color: rgb(128, 128, 128);" value="16" disabled="disabled">Jurídica</option>
<option style="color: rgb(128, 128, 128);" value="26" disabled="disabled">Atividade parlamentar</option>
<option style="color: rgb(128, 128, 128);" value="42" disabled="disabled">- - - noticias parlamentares</option>
<option style="color: rgb(128, 128, 128);" value="20" disabled="disabled">Informativo</option>
<option style="color: rgb(128, 128, 128);" value="21" disabled="disabled">- - - Colunas</option>
<option style="color: rgb(128, 128, 128);" value="36" disabled="disabled">- - - Sobre a Gazeta</option>
<option style="color: rgb(128, 128, 128);" value="34" disabled="disabled">Minuto a minuto</option>
<option style="color: rgb(128, 128, 128);" value="38" disabled="disabled">- - - ACOMPANHE A COBERTURA DO IMPEACHMENT</option>
<option style="color: rgb(128, 128, 128);" value="39" disabled="disabled">ESPECIAL</option>
<option style="color: rgb(128, 128, 128);" value="40" disabled="disabled">- - - ACOMPANHE A COBERTURA DO IMPEACHMENT</option>

UPDATE:

j'essaie de cacher ces catégories avec CSS

.adminK2RightCol > select option:disabled {
    visibility: hidden;
}

Ceci masque le nom de la catégorie dans la liste déroulante, mais conserve une ligne d'option vide

2
Guilherme

Il peut exister un moyen correct, plus profond dans les profondeurs de K2, de ne pas inclure les catégories désactivées dans la liste à la première allure, mais la solution la plus rapide consiste à utiliser regex pour les supprimer.

<?php $catinput = $this->lists['categories']; 
echo preg_replace('#<option[^>]*\sdisabled\=[^>]*>.*?</option>#','',$catinput); ?>
3
David Hayes

Lorsque vous travaillez avec du code HTML valide, il est généralement plus stable d'utiliser un analyseur DOM plutôt qu'un regex. (Bien que dans ce cas, la solution de David ne devrait pas se briser facilement)

démo

$html = /* your HTML string */ ;

libxml_use_internal_errors(true);
$dom=new DOMDocument; 
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
$options = $xpath->query('//option[@disabled]');
for ($i = $options->length; --$i >= 0;) {  // when removing nodes from DOM, work in reverse order for stability
  $option = $options->item($i);
  $trailing_whitespace = $option->nextSibling;
  $option->parentNode->removeChild($option);
  $trailing_whitespace->parentNode->removeChild($trailing_whitespace);  // optionally remove line returns after removed tags
}

echo $dom->saveHTML();  // display the new HTML
0
mickmackusa