web-dev-qa-db-fra.com

Changer le paramètre "Afficher le titre de la page" pour chaque élément de menu

J'ai un site avec quelques centaines d'éléments de menu. J'ai besoin de changer un paramètre dans tous. À l'heure actuelle, dans la plupart des pages "Afficher l'en-tête de la page", le paramètre est défini sur "Non". J'ai besoin qu'il soit réglé sur "Utiliser global" dans tous les éléments de menu.

Je ne pense pas que ce soit possible à partir du backend, alors je suis allé à la base de données et j'ai trouvé le tableau 'menu' contenant tous les éléments du menu. Malheureusement, le paramètre "show_page_heading" se trouve dans une grande structure de données JSON. Tous les paramètres qui y sont stockés doivent être conservés à l'exception de "show_page_heading", qui doit passer de 0 ou 1 à "" (chaîne vide).

Y-a-t-il un moyen de faire ça?

2
zorza

Je crois que vous devrez utiliser des instructions SQL telles que ci-dessous. Mais soyez prudent - SAUVEZ LA TABLE EN PREMIER pour être sûr que vous pourrez le restaurer s'il y a plus de considérations que vous n'en avez réalisées à ce stade.

Cela pourrait être combiné en une seule instruction SQL, mais pour plus de clarté, exécutez chacune d'elles.

UPDATE xxx_menu 
SET params = REPLACE(
    params,
    'show_page_heading":"1"',
    'show_page_heading":""'
  ) 
WHERE params LIKE '%show_page_heading":"1"%' 

UPDATE xxx_menu 
SET params = REPLACE(
    params,
    'show_page_heading":"0"',
    'show_page_heading":""'
  ) 
WHERE params LIKE '%show_page_heading":"0"%' 

Une modification est en attente à propos de la dernière ligne de la deuxième instruction SQL. J'ai rejeté la modification parce que je veux garder la clarté sur le fait que la première instruction modifie les enregistrements dont la valeur est "1" et que la deuxième instruction modifie les enregistrements dont la valeur est "0". Les deux instructions définissent la valeur de la base de données sur "".

Il est discutable de savoir ce qui est "correct", mais séparer et expliquer les deux devrait rester pour clarifier ce qui se passe et permettre à l'utilisateur de modifier si nécessaire en fonction des circonstances. J'avais des enregistrements avec "" et "0" dans la base de données, donc ne voulez pas présumer que mes paramètres doivent être les mêmes que ceux de tout le monde.

6
GDP

@zorza Merci. Enlever les guillemets était ce dont j'avais besoin. De nombreux menus ont été configurés pour ne pas afficher l'en-tête du menu et je voulais qu'ils utilisent plutôt le paramètre global. Cette modification a fonctionné pour moi:

UPDATE `xxx_menu` 
SET params = REPLACE(
        params,
        '"show_page_heading":0',
        '"show_page_heading":""'
) 
WHERE params LIKE '%"show_page_heading":0%'
0
seamonkey