How can I rewrite drupal page metatags from within a Rules module action?












0















I am trying to detect when a content-type node is updated or saved for the first time and has attached audio.



If this is the case I want to re-write the Twitter Card meta tags to turn an image card into a media card and then include a link to the relevant audio field to complete the media card and player options.



I have a rule set that detects the creation / update of a node; I can screen for nodes of the correct "type", and my rule fires appropriately, but I am failing on my rule action to re-write the meta tags.



Rules tells me that $node is available to me, so I've been trying to do:



$node->metatags[LANGUAGE_NONE]['description']['value'] = 'Some description.';
$node->metatags[LANGUAGE_NONE]['title']['value'] = 'Some title | ZZZ';


This I have followed by an "entity save" action. My rationale is to write the changes before the recursion lock kicks in and stops the rule executing.



I've been going round the houses for a day trying to solve this. Can someone please point me in the right direction?



Many thanks.










share|improve this question



























    0















    I am trying to detect when a content-type node is updated or saved for the first time and has attached audio.



    If this is the case I want to re-write the Twitter Card meta tags to turn an image card into a media card and then include a link to the relevant audio field to complete the media card and player options.



    I have a rule set that detects the creation / update of a node; I can screen for nodes of the correct "type", and my rule fires appropriately, but I am failing on my rule action to re-write the meta tags.



    Rules tells me that $node is available to me, so I've been trying to do:



    $node->metatags[LANGUAGE_NONE]['description']['value'] = 'Some description.';
    $node->metatags[LANGUAGE_NONE]['title']['value'] = 'Some title | ZZZ';


    This I have followed by an "entity save" action. My rationale is to write the changes before the recursion lock kicks in and stops the rule executing.



    I've been going round the houses for a day trying to solve this. Can someone please point me in the right direction?



    Many thanks.










    share|improve this question

























      0












      0








      0








      I am trying to detect when a content-type node is updated or saved for the first time and has attached audio.



      If this is the case I want to re-write the Twitter Card meta tags to turn an image card into a media card and then include a link to the relevant audio field to complete the media card and player options.



      I have a rule set that detects the creation / update of a node; I can screen for nodes of the correct "type", and my rule fires appropriately, but I am failing on my rule action to re-write the meta tags.



      Rules tells me that $node is available to me, so I've been trying to do:



      $node->metatags[LANGUAGE_NONE]['description']['value'] = 'Some description.';
      $node->metatags[LANGUAGE_NONE]['title']['value'] = 'Some title | ZZZ';


      This I have followed by an "entity save" action. My rationale is to write the changes before the recursion lock kicks in and stops the rule executing.



      I've been going round the houses for a day trying to solve this. Can someone please point me in the right direction?



      Many thanks.










      share|improve this question














      I am trying to detect when a content-type node is updated or saved for the first time and has attached audio.



      If this is the case I want to re-write the Twitter Card meta tags to turn an image card into a media card and then include a link to the relevant audio field to complete the media card and player options.



      I have a rule set that detects the creation / update of a node; I can screen for nodes of the correct "type", and my rule fires appropriately, but I am failing on my rule action to re-write the meta tags.



      Rules tells me that $node is available to me, so I've been trying to do:



      $node->metatags[LANGUAGE_NONE]['description']['value'] = 'Some description.';
      $node->metatags[LANGUAGE_NONE]['title']['value'] = 'Some title | ZZZ';


      This I have followed by an "entity save" action. My rationale is to write the changes before the recursion lock kicks in and stops the rule executing.



      I've been going round the houses for a day trying to solve this. Can someone please point me in the right direction?



      Many thanks.







      drupal-7 meta-tags






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Jan 2 at 23:30









      ChrisChris

      116




      116
























          1 Answer
          1






          active

          oldest

          votes


















          0














          Didn't fully understand your requirement. But you can easily update your node datas using hook_node_presave (https://api.drupal.org/api/drupal/modules%21node%21node.api.php/function/hook_node_presave/7.x) before node is being saved in to database.



          Use hook_node_insert(https://api.drupal.org/api/drupal/modules%21node%21node.api.php/function/hook_node_insert/7.x) and hook_node_update(https://api.drupal.org/api/drupal/modules%21node%21node.api.php/function/hook_node_update/7.x) if you need to do the same thing after the node is saved in to database






          share|improve this answer
























          • Thank you; can I call these as an action from within Rules? The reason for doing this in this long-winded way is that people may not add audio required for a media card to a node initially. Instead, they may add that audio later. This means I need a way to react to the change and re-write the metatags appropriately.

            – Chris
            Jan 3 at 12:51













          • You cannot use those function within the rules. hook_node_update should be the right fit for your needs. But you have to write a custom module and call these function from there.

            – Naushad
            Jan 4 at 4:47












          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54014546%2fhow-can-i-rewrite-drupal-page-metatags-from-within-a-rules-module-action%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          0














          Didn't fully understand your requirement. But you can easily update your node datas using hook_node_presave (https://api.drupal.org/api/drupal/modules%21node%21node.api.php/function/hook_node_presave/7.x) before node is being saved in to database.



          Use hook_node_insert(https://api.drupal.org/api/drupal/modules%21node%21node.api.php/function/hook_node_insert/7.x) and hook_node_update(https://api.drupal.org/api/drupal/modules%21node%21node.api.php/function/hook_node_update/7.x) if you need to do the same thing after the node is saved in to database






          share|improve this answer
























          • Thank you; can I call these as an action from within Rules? The reason for doing this in this long-winded way is that people may not add audio required for a media card to a node initially. Instead, they may add that audio later. This means I need a way to react to the change and re-write the metatags appropriately.

            – Chris
            Jan 3 at 12:51













          • You cannot use those function within the rules. hook_node_update should be the right fit for your needs. But you have to write a custom module and call these function from there.

            – Naushad
            Jan 4 at 4:47
















          0














          Didn't fully understand your requirement. But you can easily update your node datas using hook_node_presave (https://api.drupal.org/api/drupal/modules%21node%21node.api.php/function/hook_node_presave/7.x) before node is being saved in to database.



          Use hook_node_insert(https://api.drupal.org/api/drupal/modules%21node%21node.api.php/function/hook_node_insert/7.x) and hook_node_update(https://api.drupal.org/api/drupal/modules%21node%21node.api.php/function/hook_node_update/7.x) if you need to do the same thing after the node is saved in to database






          share|improve this answer
























          • Thank you; can I call these as an action from within Rules? The reason for doing this in this long-winded way is that people may not add audio required for a media card to a node initially. Instead, they may add that audio later. This means I need a way to react to the change and re-write the metatags appropriately.

            – Chris
            Jan 3 at 12:51













          • You cannot use those function within the rules. hook_node_update should be the right fit for your needs. But you have to write a custom module and call these function from there.

            – Naushad
            Jan 4 at 4:47














          0












          0








          0







          Didn't fully understand your requirement. But you can easily update your node datas using hook_node_presave (https://api.drupal.org/api/drupal/modules%21node%21node.api.php/function/hook_node_presave/7.x) before node is being saved in to database.



          Use hook_node_insert(https://api.drupal.org/api/drupal/modules%21node%21node.api.php/function/hook_node_insert/7.x) and hook_node_update(https://api.drupal.org/api/drupal/modules%21node%21node.api.php/function/hook_node_update/7.x) if you need to do the same thing after the node is saved in to database






          share|improve this answer













          Didn't fully understand your requirement. But you can easily update your node datas using hook_node_presave (https://api.drupal.org/api/drupal/modules%21node%21node.api.php/function/hook_node_presave/7.x) before node is being saved in to database.



          Use hook_node_insert(https://api.drupal.org/api/drupal/modules%21node%21node.api.php/function/hook_node_insert/7.x) and hook_node_update(https://api.drupal.org/api/drupal/modules%21node%21node.api.php/function/hook_node_update/7.x) if you need to do the same thing after the node is saved in to database







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Jan 3 at 12:37









          NaushadNaushad

          7612




          7612













          • Thank you; can I call these as an action from within Rules? The reason for doing this in this long-winded way is that people may not add audio required for a media card to a node initially. Instead, they may add that audio later. This means I need a way to react to the change and re-write the metatags appropriately.

            – Chris
            Jan 3 at 12:51













          • You cannot use those function within the rules. hook_node_update should be the right fit for your needs. But you have to write a custom module and call these function from there.

            – Naushad
            Jan 4 at 4:47



















          • Thank you; can I call these as an action from within Rules? The reason for doing this in this long-winded way is that people may not add audio required for a media card to a node initially. Instead, they may add that audio later. This means I need a way to react to the change and re-write the metatags appropriately.

            – Chris
            Jan 3 at 12:51













          • You cannot use those function within the rules. hook_node_update should be the right fit for your needs. But you have to write a custom module and call these function from there.

            – Naushad
            Jan 4 at 4:47

















          Thank you; can I call these as an action from within Rules? The reason for doing this in this long-winded way is that people may not add audio required for a media card to a node initially. Instead, they may add that audio later. This means I need a way to react to the change and re-write the metatags appropriately.

          – Chris
          Jan 3 at 12:51







          Thank you; can I call these as an action from within Rules? The reason for doing this in this long-winded way is that people may not add audio required for a media card to a node initially. Instead, they may add that audio later. This means I need a way to react to the change and re-write the metatags appropriately.

          – Chris
          Jan 3 at 12:51















          You cannot use those function within the rules. hook_node_update should be the right fit for your needs. But you have to write a custom module and call these function from there.

          – Naushad
          Jan 4 at 4:47





          You cannot use those function within the rules. hook_node_update should be the right fit for your needs. But you have to write a custom module and call these function from there.

          – Naushad
          Jan 4 at 4:47




















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54014546%2fhow-can-i-rewrite-drupal-page-metatags-from-within-a-rules-module-action%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          MongoDB - Not Authorized To Execute Command

          How to fix TextFormField cause rebuild widget in Flutter

          in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith