web-dev-qa-db-fra.com

Le texte a disparu après avoir pris le style des paramètres de la base de données

J'ai décidé d'extraire les paramètres de mon module directement à partir de la base de données, pour les mettre dans ma feuille de style variable. Je sais que ce n'est pas la méthode recommandée, mais pour apprendre à aimer, je trouve que c'est un bon test.

Je fais ça comme ça:

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query
    ->select($db->quoteName('params'))
    ->from($db->quoteName('#__modules'))
    ->where($db->quoteName('module') . ' LIKE ' . $db->quote('mod_ext_superfish_menu'));

$db->setQuery($query);
$results = $db->loadResult();
$params = json_decode($results);

var_dump($params);

Cela fonctionne bien et je reçois toutes les variables dans mon CSS. tout le texte qui figurait dans les éléments de ma liste a maintenant disparu. Le style est donc correct, mais le texte censé figurer dans les éléments stylisés a disparu. Qu'est ce que j'ai mal fait?

Pour ajouter, le style est fait en tant que tel:

.menu {
    line-height:    1.0;

    <?php // WIDTH
    if($params->menuWidth != "") {
        echo "width: ".$params->gmenuWidth."px;";
    } 
    ?>

    <?php // HEIGHT
    if($params->menuHeight != "") {
        echo "height: ".$params->menuHeight."px;";
    }
    ?>



    <?php //margin top & margin left 
    if($params->menuMarginLeft != "") {
    echo "margin-left: ".$params->menuMarginLeft."px; ";
}
if($params->menuMarginTop != "") {
    echo "margin-top: ".$params->menuMarginTop."px; ";
}
?>

}

1
Hocho

Vous ne pouvez pas simplement ajouter du CSS à votre fichier PHP et vous attendre à ce qu'il fonctionne.

Par exemple, ce qui suit ne fera que PAS :

<?php  
   .menu {
       font-size: 12px;
   }
?>

J'ai déjà dans une réponse précédente expliqué comment utiliser addStyleDeclaration(). Je sais que vous essayez de savoir ce qui est formidable, mais si quelqu'un recommande une méthode, ne l'ignorez pas;)

Donc, premièrement, supprimez tout votre code et ajoutez ce qui suit:

$doc = JFactory::getDocument();

$css = '.menu { line-height: 1.0; }';

if($params->menuWidth != '') {
    $css .= '.menu { width: ' . $params->gmenuWidth . 'px; }';
}
if($params->menuHeight != '') {
    $css .= '.menu { height: ' . $params->menuHeight . 'px; }';
}
if($params->menuMarginLeft != '') {
    $css .= '.menu { margin-left: ' . $params->menuMarginLeft . 'px; }';
}
if($params->menuMarginTop != '') {
    $css .= '.menu { margin-top: ' . $params->menuMarginTop . 'px; }';
} 

$doc->addStyleDeclaration($css);

Vous verrez ci-dessus que le premier $css Est tel quel. Mais les autres à l'intérieur des instructions if ont un . Avant le symbole =. Cela signifie que le nom de la variable doit être utilisé plusieurs fois sans que cela ait un effet sur l'autre.

Enfin, pour ajouter des CSS ayant une valeur basée sur des variables/paramètres, respectez cette méthode et utilisez ne le faites pas n’importe quelle autre méthode.

J'espère que cela t'aides

2
Lodder