Прошу помощи

33 views
Skip to first unread message

Yuri Pavlyukov

unread,
Feb 23, 2015, 1:31:15 AM2/23/15
to flexo-mana...@googlegroups.com
Здравствуйте.

Есть у мня две задачи (как водится, простая и сложная):

1. Сделать из комментса фитбек. Для этого просто нужно отправлять на емейл то, что написано на сайте.
Но главный вопрос, как вставить (body) в тело письма.

В то место, где происходит запись данных в базу:

......лялял.....    if ( $comment->save() )
{
Flash::set( 'comments_success', ($settings['auto_approve'] == 'yes' ? __( 'Comment posted successfully!' ) : __( 'Comment sent to moderation...' ) ) );

unset( $post['body'] );

Flash::set( 'comments_form', $post );

ставим строчку:    mail("pavl...@pavlyukov.ru", "отзыв на сайте", ['body'], "111");

Письмо приходит если вместо ['body']  написать что угодно в кавычках. При такой грамматике и еще двух десятках разных ее (грамматики) вариаций сайт крашится.
Дайте совет пожалста как сообщение вписать в тело письма? Ну ли может есть уже что готовое отправляющее на емейл.

2. Есть необходимость (ох не спрашивайте зачем) делать описанное выше, по адресам по порядку.
То есть один коммент на один емейл. Второй на другой. И так по количеству емейлов.... Доходим до последнего и потом опять на первый. Каждый новый коммент на новый емейл, которых примерно десяток.
Этож нужно отдельно таблицу с емейлами делать в СКУЛе????
В общем если дадите совет - Буду презнателен.

Александр Маслаков

unread,
Feb 23, 2015, 10:31:30 AM2/23/15
to flexo-mana...@googlegroups.com
> 1.
В тело письма может быть стоит класть текст комментария, отправленного с сайта?
Но прежде чем отправить какую ни будь строку $text, нужно для начала убрать все теги из строки и добавить экранирование специальных символов:

$subject = 'Website Change Request';
$text = htmlspecialchars(strip_tags($text));
mail("pavl...@pavlyukov.ru"$subject, $text, '');
// (четвертый параметр - загоовки письма)

Но вообще советую использовать хэлпер Email:

use_helper('Email');
$email = new Email;
$email->from("em...@site.com");
$email->to("pavl...@pavlyukov.ru");
$email->subject('Загоовки письма');
$email->message($text);
$email->send();

Попробуйте, может это решит вашу проблему.

> 2.

Не обязательно делать базу. Но нужно где то держать массив адресов, возможно в конфиг-файле.

$GLOBALS['my_emails'] = array(
   // ...
);

Потом можно завести в сессии переменную в которую вы будете класть номер адреса, куда вы в последний раз отправляли письмо.

$_SESSION['last_my_emails_index'] = 3;

Потом где то в коде необходимо написать функцию:

function sendToNextEmail() {
  if (! isset($_SESSION['last_my_emails_index']) || $_SESSION['last_my_emails_index'] + 1 >= count($GLOBALS['my_emails'])) {
    $_SESSION['last_my_emails_index'] = 0;
  } else {
    $_SESSION['last_my_emails_index']++;
  }

  $nextEmail = $GLOBALS['my_emails'][$_SESSION['last_my_emails_index']];

  // send email ...
}

Пробуйте.

--
Вы получили это сообщение, поскольку подписаны на группу "flexo-manage-content".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес flexo-manage-con...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.



--

Yuri Pavlyukov

unread,
Feb 24, 2015, 10:31:07 AM2/24/15
to flexo-mana...@googlegroups.com
Позвольте вас отспосибить Александр.

1. Чегото с хелпером не получилось но вот так получилось 

$comment = htmlspecialchars(strip_tags($post['body']));
mail("pavl...@pavlyukov.ru", "Заявка", $post['body'], $post['author_name']);

Просто я в прошлых своих экспериментах по тормозизму это все писал после     unset( $post['body'] ); Сделал до и все сразу заработало.
За подсказку с htmlspecialchars   - спасибо.
2. Функцию назначать не стал, так прям и залимонил:
  if (! isset($_SESSION['last_my_emails_index']) || $_SESSION['last_my_emails_index'] + 1 >= count($GLOBALS['my_emails'])) {
    $_SESSION['last_my_emails_index'] = 0;
  } else {
    $_SESSION['last_my_emails_index']++;
  }
  $nextEmail = $GLOBALS['my_emails'][$_SESSION['last_my_emails_index']];
$comment = htmlspecialchars(strip_tags($post['body']));
mail($nextEmail, "Заявка", $post['body'], $post['author_name']);

Не придумал куда можно вставить первоначальное значение переменной $_SESSION  А все и так сработало. Она видимо нулем считается по умолчанию.
Вот теперь думаю, куда емейлы из конфига перенести. По хорошему бы в какойнить файлец плагина коммент... Но это уже мелочи.
Вам СПАСИБО за хороший и, главное быстрый ответ.

Александр Маслаков

unread,
Feb 24, 2015, 10:52:49 AM2/24/15
to flexo-mana...@googlegroups.com
Всегда пожалуйста.

--
Вы получили это сообщение, поскольку подписаны на группу "flexo-manage-content".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес flexo-manage-con...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

Yuri Pavlyukov

unread,
Mar 4, 2015, 2:21:44 AM3/4/15
to flexo-mana...@googlegroups.com
Здравствуйте. Как сделать редактируемый список адресов?

Я такой хитрый думаю сделаю страничку и потдерну ее в конфиг:

$GLOBALS['my_emails'] = array(    $this->find('/spisok-adresov')->content('body') );


Конечноже фиг - по тому что на этапе работы с конфигом что такое $this не известно.
Ну думаю может из базы смогу дернуть какнить типа:
$sql = "SELECT content FROM green_page_part WHERE id = 116"; $results = mysqli_query($sql); var_dump($results);
$GLOBALS['my_emails'] = array( $results );

Чего-то тоже все плохо 
Есть совет???
 

Yuri Pavlyukov

unread,
Mar 4, 2015, 2:23:36 AM3/4/15
to flexo-mana...@googlegroups.com
var_dump($results); - сюда ошибочно попало... Это я с отображением на страниах эксперементировал.

Александр Маслаков

unread,
Mar 4, 2015, 9:09:08 AM3/4/15
to flexo-mana...@googlegroups.com
Да, можно создать сниппет, назвать, например emails
Этот сниппет будет находится в папке /snippets/emails.php
В сниппет поместите код:

<?php

Все. Теперь вы сможете получить доступ к списку адресов следующей строкой в коде:

$emails = require(SNIPPETS_ROOT.DIRECTORY_SEPARATOR.'emails.'.SNIPPETS_EXT);

2015-03-04 9:23 GMT+02:00 Yuri Pavlyukov <pavl...@gmail.com>:
var_dump($results); - сюда ошибочно попало... Это я с отображением на страниах эксперементировал.

--
Вы получили это сообщение, поскольку подписаны на группу "flexo-manage-content".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес flexo-manage-con...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

Yuri Pavlyukov

unread,
Mar 6, 2015, 12:02:08 PM3/6/15
to flexo-mana...@googlegroups.com
Такая вот фигня с попыткой вызвать снипет 
Fatal error: require() [function.require]: Failed opening required 'SNIPPETS_ROOT/emails.SNIPPETS_EXT' (include_path='....
Как будто его (снипета) нет???? А он ведь есть.



среда, 4 марта 2015 г., 21:09:08 UTC+7 пользователь Александр Маслаков написал:
Да, можно создать сниппет, назвать, например emails
Этот сниппет будет находится в папке /snippets/emails.php
В сниппет поместите код:

<?php

Все. Теперь вы сможете получить доступ к списку адресов следующей строкой в коде:

$emails = require(SNIPPETS_ROOT.DIRECTORY_SEPARATOR.'emails.'.SNIPPETS_EXT);
2015-03-04 9:23 GMT+02:00 Yuri Pavlyukov <pavl...@gmail.com>:
var_dump($results); - сюда ошибочно попало... Это я с отображением на страниах эксперементировал.

--
Вы получили это сообщение, поскольку подписаны на группу "flexo-manage-content".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес flexo-manage-content+unsub...@googlegroups.com.

Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

Александр Маслаков

unread,
Mar 6, 2015, 1:03:00 PM3/6/15
to flexo-mana...@googlegroups.com
Попробуйте require(__DIR__ . '/snippets/emails.php');

Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес flexo-manage-con...@googlegroups.com.

Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

Yuri Pavlyukov

unread,
Mar 9, 2015, 8:16:50 AM3/9/15
to flexo-mana...@googlegroups.com
хехе... 
Снипет-то оно подгребает... Только отчего-то отображает его сразу за <body> на  всех страницах включая админку. 

7 марта 2015 г., 1:02 пользователь Александр Маслаков <jmas.u...@gmail.com> написал:
Вы получили это сообщение, поскольку подписаны на одну из тем в группе "flexo-manage-content".
Чтобы отменить подписку на эту тему, перейдите по ссылке https://groups.google.com/d/topic/flexo-manage-content/FZmyQcSqrYM/unsubscribe.
Чтобы отменить подписку на эту группу и все ее темы, отправьте письмо на электронный адрес flexo-manage-con...@googlegroups.com.

Александр Маслаков

unread,
Mar 9, 2015, 12:45:21 PM3/9/15
to flexo-mana...@googlegroups.com
Можете сбросить кусок кода снипеета (полностью) и место где вы пробуете получить доступ (подключить) сниппет.

понедельник, 9 марта 2015 г. пользователь Yuri Pavlyukov написал:

Yuri Pavlyukov

unread,
Mar 10, 2015, 2:30:48 AM3/10/15
to flexo-mana...@googlegroups.com
Конфиг: Вот так все работает 
$GLOBALS['my_emails'] = array('pavl...@pavlyukov.ru','yurk...@mail.ru',);

А вот собственно если пойти по пути снипета. А в снипет просто адреса через запятую  в апострофах пишутся.
$email = require(__DIR__ . '/snippets/emails.php');
$GLOBALS['my_emails'] = array($email);

А отправка по вашему алгоритму происходит:
  if (! isset($_SESSION['last_my_emails_index']) || $_SESSION['last_my_emails_index'] + 1 >= count($GLOBALS['my_emails'])) {
    $_SESSION['last_my_emails_index'] = 0;
  } else {
    $_SESSION['last_my_emails_index']++;
  }
  $nextEmail = $GLOBALS['my_emails'][$_SESSION['last_my_emails_index']];
$comment = htmlspecialchars(strip_tags($post['body']));
mail($nextEmail, "Заявка", $post['body'], $post['author_name']);




9 марта 2015 г., 23:45 пользователь Александр Маслаков <jmas.u...@gmail.com> написал:

Александр Маслаков

unread,
Mar 10, 2015, 4:53:12 AM3/10/15
to flexo-mana...@googlegroups.com
В сниппете как раз нужно, дословно:

<?php return array("ema...@mail.com","ema...@mail.com");


вторник, 10 марта 2015 г. пользователь Yuri Pavlyukov написал:

Yuri Pavlyukov

unread,
Mar 10, 2015, 10:36:53 AM3/10/15
to flexo-mana...@googlegroups.com
Написал. Почта не ходит. Сделал страничку с кодом:
<?php var_dump($GLOBALS['my_emails']); ?>
Выводит:
array(1) { [0]=> array(2) { [0]=> string(16) "yurk...@mail.ru" [1]=> string(22) "pavl...@pavlyukov.ru" } } 
И, я конечно в ПХП мало что понимаю, но по моему получилось два массива.



10 марта 2015 г., 15:53 пользователь Александр Маслаков <jmas.u...@gmail.com> написал:

Александр Маслаков

unread,
Mar 10, 2015, 10:38:25 AM3/10/15
to flexo-mana...@googlegroups.com
вместо:
$email = require(__DIR__ . '/snippets/emails.php');
$GLOBALS['my_emails'] = array($email);

сделайте:
$GLOBALS['my_emails'] = require(__DIR__ . '/snippets/emails.php');

Yuri Pavlyukov

unread,
Mar 10, 2015, 10:51:20 AM3/10/15
to flexo-mana...@googlegroups.com
Ага.... точно точно. Уже сам догадался.:):):) всё ходит.
Спасибище спасибинское.

10 марта 2015 г., 21:38 пользователь Александр Маслаков <jmas.u...@gmail.com> написал:
Reply all
Reply to author
Forward
0 new messages