web-dev-qa-db-fra.com

Traitement par lots des options d'élément de menu

Je travaille sur un site Web avec ~ 100 éléments de menu (le type est "Article simple"). Chaque élément de menu a ses propres paramètres uniques dans l’onglet "Options":

enter image description here

Cela remplace évidemment les paramètres globaux, mais je souhaite le redéfinir sur "Utiliser global" afin de contrôler les paramètres à partir de "Paramètres globaux" dans le gestionnaire d'articles et que tous les articles aient le même aspect.

Est-il possible de définir "Utiliser global" pour toutes les options dans tous les éléments de men à la fois?

Ma première pensée a été d’utiliser une requête MySql, mais je ne sais pas comment elle devrait être écrite ni quelle entrée de base de données je devrais changer.

3
johanpw

Utilisez ceci à vos risques et périls:

UPDATE jos_menu SET params = CONCAT('{"show_title":"","link_titles":"","show_intro":"","info_block_position":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","link_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_item_navigation":"","show_vote":"","show_icons":"","show_print_icon":"","show_email_icon":"","show_hits":"","show_tags":"","show_noauth":"","urls_position":"",', SUBSTR(params, POSITION('"menu-anchor_title"' IN params))) WHERE `link` like "index.php?option=com_content&view=article&id=%"
  • Remplacez jos par votre préfixe de table Joomla.
  • Comme FFrewin l'a dit, "n'essayez pas cela sur un site Web actif - et gardez toujours une copie de sauvegarde de la base de données avant d'utiliser des mises à jour en masse directement sur celle-ci."

Mise à jour

La requête a fonctionné sur un environnement de test Joomla 3.3.3.

2
Farahmand

Je viens de faire cela avec joomla 3.7, il ne fallait que changer un paramètre. voici le code que j'ai utilisé avec succès:

update xxx_menu set params = replace(params,'"show_page_heading":"1"','"show_page_heading":"0"') where params like '%"show_page_heading":"1"%'

Je l'ai testé avec une clause where pour un identifiant de menu en premier pour être sûr que cela fonctionnait, et bien sûr tout sauvegardé en premier! J'espère que ça aide quelqu'un.

1

Dans PHPmyAdmin, vous pouvez écrire quelque chose comme ci-dessous:

UPDATE `#__menu`
SET `params` = '{"show_title":"","link_titles":"","show_intro":"","info_block_position":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","link_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_item_navigation":"","show_vote":"","show_icons":"","show_print_icon":"","show_email_icon":"","show_hits":"","show_tags":"","show_noauth":"","urls_position":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","menu_text":1,"page_title":"","show_page_heading":0,"page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}'
WHERE `link` LIKE 'index.php?option=com_content&view=article&id=%'

Remarques:

  • Dans l'instruction de mise à jour, utilisez le préfixe de la base de données de votre table.
  • SET params prend les valeurs pour les options d’éléments de menu. Pour définir un paramètre par défaut, il vous suffit de transmettre une valeur vide, par exemple. "montrer le titre":"". Vérifiez chaque paramètre pour vous assurer que vous avez le réglage souhaité.
  • WHERE link LIKE 'index.php? Option = com_content & view = article & id =%' est utilisé pour rechercher uniquement les articles simples.
  • N'essayez pas cela sur un site Web actif - et gardez toujours une sauvegarde de la base de données avant de faire fonctionner des mises à jour en masse directement dessus.

Mise à jour:

Grâce au commentaire de Fari, soyez conscient: Cette requête affectera également des paramètres tels que la méta-description, les méta-mots-clés, la classe de page, le titre de la page du navigateur, etc.

0
FFrewin