We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 2750
    • 115 Posts
    Доброго времени суток!
    Необходимо на странице со статьей поставить кнопку, по нажатии на которую показывается форма с полем для ввода адреса электронной почты и кнопкой "Отправить". По нажатию на кнопку содержимое открытой страницы ([*pagetitle*], [*content*] ну и параметры TV определенные) отправляются на указанный ящик...Чую, что нужно копать в сторону eForm. Только вот как, не совсем могу совладать знаниями smiley чтобы реализовать..
    Например, вызываем форму:

    [!eForm? &formid=`SendToEMailForm` &to=` ??? ` &tpl=`eSendToEMail` &report=`eSendToEMail`!]
    


    И сразу вопрос: как при нажатии на кнопку в параметр $to занести значение поля email чанка eSendToEMail.

    Содержимое чанка eSendToEMail:

    <form method="post" id="send-to-email" action="[~[*id*]~]">
    	<p><label for="email">Ваш Е-mail:</label>
    		<input name="formid" type="hidden" value="ContactForm" />
    		<input name="pagetitle" type="hidden" value="[*pagetitle*]" />
    		<input name="content" type="hidden" value="[*content*]" />
    		<input name="content" type="hidden" value="[*tv1*]" />
    		
    		<input type="text" name="email" id="email"></input>
    	</p>
    	<button name="send"></span>Отправить</span></button>
    </form>
    


    А может есть готовые варианты?
    Спасибо за помощь.

      • 785
      • 2,113 Posts
      Смотрите документацию, которая лежит прямо в папке сниппета:
      &sendirect (Optional)
      This will use the form field called email to supply the email address to send the message to. Set to 1 to activate send direct. Defaults to 0

      А решение в скрытые поля засунуть весь контент не слишком удачное – много лишнего отсылается пользователю и получается обратно. Лучше небольшой сниппет написать и подключить его к событию eFormOnBeforeMailSent.
        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
        Статьи о MODx, регулярно новые публикации
        • 2750
        • 115 Posts
        С английским не очень, но если я правильно понял, то когда параметр &sendirect=`1` , то данные формы будут отсылаться по тому адресу, который введен в поле с name="email", правильно?
        И почему много лишнего посылается пользователю, ведь в скрытых полях я посылаю именно то, что нужно...название статьи и саму статью, плюс параметр, а что лишнее?
        ps а где указать, что при наступлении события такого-то должне выполняться сниппет такой-то, для плагина понятно, отмечаем событие и все, а со сниппетом как быть?
          • 785
          • 2,113 Posts
          В каком смысле «со сниппетом как быть»? Писать сниппет, пример есть в той же документации. А отсылается лишнее – сама статья. То есть целиком вся статья отсылается в браузер пользователя как скрытое поле, то есть он ее не видит, потом статья пересылается обратно на сервер и сервер отправляет ее в письме. А вполне достаточно ничего такого не посылать туда и обратно, а если с определенной страницы пришел запрос, то сервер может взять нужную статью и послать на почте.
            Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
            Статьи о MODx, регулярно новые публикации
            • 2750
            • 115 Posts
            Понял, спасибо за наводку, буду копать доки
              • 2750
              • 115 Posts
              Нужен совет, потому что отправка статьи на мыло работает не до конца, пишет ошибку
              Parse error: parse error in Z:\home\peremena-avia.local\www\manager\includes\document.parser.class.inc.php(770) : eval()’d code on line 2

              1. Фрагмент кода моего шаблона (на основе доки для eForm):
              [[eFormEvent]]
              [!eForm? &eformOnBeforeMailSent=`createArticleForEmail` &protectSubmit=`0` &formid=`sendToMailForm` &sendirect=`1` &tpl=`eSendToMailForm` &report=`eSendToMailReport` &subject=`Страница с сайта peremena-avia.ru` &gotoid=`82`!]
              


              2. Код сниппета eFormEvent (в нем находится функция createArticleForEmail, которая должна выполняться при наступлении события OnBeforeMailSent):
              <?php
              function createArticleForEmail ( &$fields ){
              	$fields['content'] = [+content+];
              	return true;
              }
              ?>
              


              Но в приведенном коде зарыта собака, если применять его в таком виде, как я написал, то выкидывает ошибку, которую я указал, а если написать так:

              <?php
              function createArticleForEmail ( &$fields ){
              	$fields['content'] = '1231321212132132132132132';
              	return true;
              }
              ?>
              


              То ошибки нет и на ящик указанный пользователем приходит Текст статьи: 1231321212132132132132132.
              Вопрос собственно вот в чем:
              как в массив $fields в соответствующие элементы занести содержимое [*content*] и [*pagetitle*]?

              Пробовал и
              $fields['content'] = [+content+];
              и
              $fields['content'] = [*content*];

              В MODx API не особо силен, поскольку чую, что только он в этом случае поможет smiley, поэтому прошу помощи по MODx API.

              3. Код шаблона самой формы eSendToMailForm с полем для ввода адреса, по которому будет выслана статья сайта:
              <form method="post" action="[~[*id*]~]" id="send-to-email">
              	<input id="hid_input" type="hidden" name="formid" value="sendToMailForm" />
              	<p><input type="text" name="email" id="email" value="E-mail" size="40" maxlength="40" eform="Ваш E-mail:email:1" /></p>    
                  
              	<button name="send"></span>Отправить</span></button>
              </form>
              [+validationmessage+]    
              



              4. Код шаблона отправляемого письма, содержащего статью:
              <p>Это сообщение отправлено Вами самими с сайта peremena-avia.ru с помощью формы отправки новости себе на электронную почту. Ниже представлен текст письма:</p>
              <table>
              	<tr valign="top"><td>Текст статьи:</td><td>[+content+]</td></tr>
              </table> 
              
                • 29487
                • 385 Posts
                global $modx;
                $fields['content']=$modx->documentObject['content'];
                  • 2750
                  • 115 Posts
                  Спасибо, получилось! На почту приходит адрес статьи, ее заголовок и само содержимое.

                  1. Код сниппета (если кому нужно будет такое же вдруг реализовать):

                  <?php
                  function createArticleForEmail ( &$fields ){
                  	global $modx;
                  	$fields['article_url'] = $modx->makeURL($modx->documentObject['id'],'','','full');
                  	$fields['pagetitle'] = $modx->documentObject['pagetitle'];
                  	$fields['content'] = $modx->documentObject['content'];
                  	return true;
                  }
                  ?>
                  


                  2. Код шаблона отправляемой новости eSendToMailReport:

                  <p>Это сообщение отправлено Вами самими с сайта <название_сайта> с помощью формы отправки статьи себе на электронную почту. Ниже вы можете прочитать саму статью. Адрес статьи - [+article_url+]</p>
                  <table>
                  <tr valign="top"><td>[+pagetitle+]</td></tr>
                  <tr valign="top"><td>[+content+]</td></tr>
                  </table>