web-dev-qa-db-fra.com

Dans Admin si category = x alors ne pas afficher le contenu

Je veux vérifier l'article admin pour la catégorie de l'article. De la même manière que les champs.

Et si la catégorie est une catégorie donnée, n’affichez pas l’onglet de contenu (je vais utiliser des champs à la place).

Ensuite, je peux créer des modèles personnalisés, mais cela crée moins de confusion pour l'utilisateur.

Cela doit changer si la catégorie change afin qu'il ne puisse pas être au chargement initial de la page.

1
Eoin

Vous pourrez peut-être faire cela avec un plugin editor-xtd. Au lieu de le créer/injecter un bouton, il injectera le javascript qui fait ce que vous voulez.

Question: le champ de sélection de catégorie fait partie de l'onglet de contenu. Par conséquent, si vous avez caché l'onglet de contenu (pour certaines catégories), l'utilisateur ne pourra jamais changer cette catégorie de l'intérieur de la page de modification de l'article après le passage à l'une de ces catégories. (ou le statut de publication, le niveau d'accès, etc. d'ailleurs). Voulez-vous donc masquer l'onglet de contenu ou simplement l'éditeur?

mise à jour

Voici une preuve de concept d'un plugin-xtd qui, je crois, fait ce que vous voulez. Vous devez modifier les ID de catégorie dans la variable $ cats.

cm_hidecontent.xml

<?xml version="1.0" encoding="utf-8"?>
<extension version="3.6" type="plugin" group="editors-xtd" method="upgrade">
    <name>plg_editor-xtd_cm_hidecontent</name>
    <author>Drew G</author>
    <creationDate>Oct 2017</creationDate>
    <copyright>-</copyright>
    <authorEmail>-</authorEmail>
    <authorUrl>-</authorUrl>
    <version>3.6.0</version>
    <description>Proof of concept for hiding the content editor when certain categories are selected.</description>
    <files>
        <filename plugin="cm_hidecontent">cm_hidecontent.php</filename>
    </files>
</extension>

cm_hidecontent.php

<?php
defined('_JEXEC') or die;

/**
 * 
 */
class plgButtonCm_hidecontent extends JPlugin
{

    /**
     * Load the language file on instantiation.
     *
     * @var    boolean
     * @since  3.1
     */
    protected $autoloadLanguage = true;


    /**
     * Inject the needed javascript
     */
    function onDisplay($name, $asset, $author)
    {

        // List which category IDs you want the editor to hide from.
        // You can pull this data from a plugin parameter or leave it hardcoded
        $cats = json_encode(array(1536, 419));

        $js =
<<<EOF

jQuery(function($){

    jQuery('#jform_catid').change(function()
    {
        checkStatus();
    });

    var checkStatus = function()
    {
        // Need to cast the value to a number else Array.includes() will fail
        var val = Number(jQuery('#jform_catid').val());

        // You could hard code this array.
        var cats = {$cats};

        if(cats.includes(val))
        {
            jQuery('#myTabContent .adminform').css('visibility','hidden');
        }
        else
        {
            jQuery('#myTabContent .adminform').css('visibility','visible');
        }
    }

    // Initial pageload check
    checkStatus();

});

EOF;
        $doc = JFactory::getDocument();
        $doc->addScriptDeclaration($js);

    }
}
2
Drew G

Remplacer le administrator/components/com_content/views/article/edit.php dans votre modèle d’administrateur, puis dans le fichier remplacé, créez une condition pour masquer le code suivant si $ this-> item-> catid = '8' (8 étant l’ID de la catégorie à masquer le content table pour):

<?php if ($this->item->catid != '8') {
<?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'general')); ?>
echo JHtml::_('bootstrap.addTab', 'myTab', 'general', JText::_('COM_CONTENT_ARTICLE_CONTENT')); ?>
<div class="row-fluid">
    <div class="span9">
        <fieldset class="adminform">
            <?php echo $this->form->getInput('articletext'); ?>
        </fieldset>
    </div>
    <div class="span3">
        <?php echo JLayoutHelper::render('joomla.edit.global', $this); ?>
    </div>
</div>
<?php echo JHtml::_('bootstrap.endTab');
} else{
    <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'images')); ?>
}?>

Si vous souhaitez uniquement masquer l'éditeur (et l'ensemble de l'onglet content), créez simplement la condition autour du code suivant:

<fieldset class="adminform">
    <?php echo $this->form->getInput('articletext'); ?>
</fieldset>
2
itoctopus