использование функции comment_load($cid)

Главные вкладки

Комментарии

Аватар пользователя Виктория Виктория 31 марта 2015 в 9:20

я разобралась, что если задать cid = 1 например, то на выходе можно получить данные коммента с идентификатором 1. но другая задача встаёт: нужно получить cid данного комментария. как это сделать?

Аватар пользователя Chyvakoff Chyvakoff 31 марта 2015 в 9:29

"Виктория" wrote:
но другая задача встаёт: нужно получить cid данного комментария.

Тогда вопрос - как вы получаете данный комментарий?

Аватар пользователя Виктория Виктория 31 марта 2015 в 19:00

<a href="mailto:sas@drupal.org">sas@drupal.org</a> wrote:
В каком месте Вы хотите получить ID ? С какой страницы Вашего сайта ?!

на странице со статьей, под которой размещены комментарии. под каждым комментарием есть ссылка, наподобие ссылок "удалить" "ответить. у меня ссылка "оценить задачу". по этой ссылке открывается форма в модальном ctools окне. есть обработки кнопки этой формы. и в этом обработчике мне надо как-то получить cid комментария, чтобы по нем узнать id автора комментария, т.е. выполнить такую команду

$comment = comment_load($cid);
$comment->uid

вот как найти значение cid?

Аватар пользователя FORTIS FORTIS 1 апреля 2015 в 0:06

скорее всего cid есть в ссылке "оценить задачу" в ее href
тогда получить его скорее всего из обработчика можно при помощи arg(0) или arg(1) - в зависимости от расположения cid в адресе

Аватар пользователя Виктория Виктория 1 апреля 2015 в 0:09

FORTIS wrote:
скорее всего cid есть в ссылке "оценить задачу" в ее href
тогда получить его скорее всего из обработчика можно при помощи arg(0) или arg(1) - в зависимости от расположения cid в адресе

извините, я новичок, поясните пожалуйста момент насчет arg(0) или arg(1)?

Аватар пользователя FORTIS FORTIS 1 апреля 2015 в 0:09

ну и если там в этом обработчике у тебя есть $form_state то загляни что в внутри нее. с включенным модулем devel
написать в обработчике:

dpm($form_state);

и вызвать модальную форму и обновить страницу - выведет содержимое массива. если там есть build_args или args внутри этого $form_state то скорее всего cid там есть

Аватар пользователя Виктория Виктория 1 апреля 2015 в 0:12

FORTIS wrote:
ну и если там в этом обработчике у тебя есть $form_state то загляни что в внутри нее. с включенным модулем devel
написать в обработчике:

dpm($form_state);

и вызвать модальную форму и обновить страницу - выведет содержимое массива. если там есть build_args или args внутри этого $form_state то скорее всего cid там есть

хорошо, я вас поняла. допустим, cid там есть. но ведь нужна такая функция, которая определит этот cid комментария, чтобы воспользоваться comment_load. ссылка "оценить" есть под каждым комментарием, то есть cid не конкретный идентификатор

Аватар пользователя Виктория Виктория 10 ноября 2015 в 11:50

FORTIS wrote:
ну и если там в этом обработчике у тебя есть $form_state то загляни что в внутри нее. с включенным модулем devel
написать в обработчике:

dpm($form_state);

и вызвать модальную форму и обновить страницу - выведет содержимое массива. если там есть build_args или args внутри этого $form_state то скорее всего cid там есть


после выполнения команды dpm($form_state) вот что было на выходе (см. изображение). "args (Array, 0 elements)" - это значит что элемента cid нет?

Аватар пользователя FORTIS FORTIS 1 апреля 2015 в 0:11

arg это функция, параметром передаем ей номер аргумента в адресной строке который хотим получить, если модальное окно открывается по ссылке с адресом например:
/nojs/comment/1922/modal

то получить 1922 мы можем так:

$cid = arg(2); // то есть третий аргумент (нумерация от нуля)

Аватар пользователя FORTIS FORTIS 1 апреля 2015 в 0:14

если ссылка под каждым комментарием значит каждая ссылка содержит cid этого комментария. тот кто делал эту ссылку определял в какой позиции там находится cid, думаю это визуально заметно, вы получаете значение cid при помощи функции arg больше вам ничего не нужно, дальше используете comment_load с этим значением

Аватар пользователя Виктория Виктория 1 апреля 2015 в 0:18

FORTIS wrote:
если ссылка под каждым комментарием значит каждая ссылка содержит cid этого комментария. тот кто делал эту ссылку определял в какой позиции там находится cid, думаю это визуально заметно, вы получаете значение cid при помощи функции arg больше вам ничего не нужно, дальше используете comment_load с этим значением

ссылка такова:

'href' => 'ajax_publish/nojs/comment/'

item такой:

$items['ajax_publish/%ctools_js/comment']

как определить позицию cid?

Аватар пользователя FORTIS FORTIS 1 апреля 2015 в 0:17

arg(номер_позиции_в_адресе) будет возвращать вам нужный cid вы только номер позиции правильно укажите Smile
вы же пытаетесь получить cid в обработчике а он вызывается для каждого комментария и в момент выполнения arg вам будет возвращать то что нужно. пробуйте увидите

Аватар пользователя Виктория Виктория 1 апреля 2015 в 0:18

FORTIS wrote:
arg(номер_позиции_в_адресе) будет возвращать вам нужный cid вы только номер позиции правильно укажите Smile
вы же пытаетесь получить cid в обработчике а он вызывается для каждого комментария и в момент выполнения arg вам будет возвращать то что нужно. пробуйте увидите

спасибо большое за отзывчивость!

Аватар пользователя FORTIS FORTIS 1 апреля 2015 в 0:28

видимо у вас просто не указан cid в ссылке оценить и она для всех комментариев выглядит одинаково, верно?
тогда вам нужно ее доработать, описать как 'href' => 'ajax_publish/nojs/comment/%'
и подставлять $cid при формировании этой ссылки. а уже потом в обработчике действовать как и собирались по описанному выше

Аватар пользователя Виктория Виктория 1 апреля 2015 в 0:30

FORTIS wrote:
видимо у вас просто не указан cid в ссылке оценить и она для всех комментариев выглядит одинаково, верно?
тогда вам нужно ее доработать, описать как 'href' => 'ajax_publish/nojs/comment/%'
и подставлять $cid при формировании этой ссылки. а уже потом в обработчике действовать как и собирались по описанному выше

хорошо, но остается непонятным, как именно подставить $cid при формировании ссылки? вот так :

'ajax_publish/nojs/comment/'. $cid

Аватар пользователя FORTIS FORTIS 1 апреля 2015 в 11:20

"Виктория" wrote:
хорошо, но остается непонятным, как именно подставить $cid при формировании ссылки? вот так :

примерно так да. там где формируете скорее всего доступен или $cid или $comment
используйте
dpm(get_defined_vars());
там где формируете ссылку - обновите страницу и оно выведет вам доступные переменные (модуль devel нужен)

Аватар пользователя Виктория Виктория 1 апреля 2015 в 20:06

FORTIS wrote:
"Виктория" wrote:
хорошо, но остается непонятным, как именно подставить $cid при формировании ссылки? вот так :

примерно так да. там где формируете скорее всего доступен или $cid или $comment
используйте
dpm(get_defined_vars());
там где формируете ссылку - обновите страницу и оно выведет вам доступные переменные (модуль devel нужен)

спасибо вам!

Аватар пользователя FORTIS FORTIS 2 апреля 2015 в 15:32

в page callback которая выполняется для 'ajax_publish/%ctools_js/comment/% вы добавили $cid в парметры функции в скобочках? добавьте и используйте

Аватар пользователя Виктория Виктория 2 апреля 2015 в 15:53

FORTIS wrote:
в page callback которая выполняется для 'ajax_publish/%ctools_js/comment/% вы добавили $cid в парметры функции в скобочках? добавьте и используйте

вот callback-функция :
function comments_publish_ajax_callback($js = FALSE,$cid)

вот ссылка:
'ajax_publish/nojs/comment/'. $cid

это item:
$items['ajax_publish/%ctools_js/comment/%']

а то, что получается при выполнении команд

$cid = arg(2);
dpm(get_defined_vars());

вот:"cid (String, 7 characters ) comment
$...['cid']"

в чем ошибка?

Аватар пользователя FORTIS FORTIS 2 апреля 2015 в 15:33

укажите в page arguments => array(1,3)

а в функции которая указана как page callback:

function ИМЯ_ВАШЕЙ_ФУНКЦИИ($js, $cid) {
//используйте
}

Аватар пользователя drupby drupby 2 апреля 2015 в 16:38

"Виктория" wrote:
$cid = arg(2);
dpm(get_defined_vars());
вот:"cid (String, 7 characters ) comment
$...['cid']"
в чем ошибка?

arg(2) - comment
arg(3) - cid
только я уже говорил, что делается так

$items['ajax_publish/%ctools_js/comment/%comment'] // ссылка остается 'ajax_publish/nojs/comment/'. $cid

и в callback функцию передается объект коммента

function comments_publish_ajax_callback($js = FALSE, $comment) {
  dpm($comment);
}
Аватар пользователя Виктория Виктория 2 апреля 2015 в 16:45

drupby wrote:
"Виктория" wrote:
$cid = arg(2);
dpm(get_defined_vars());
вот:"cid (String, 7 characters ) comment
$...['cid']"
в чем ошибка?

arg(2) - comment
arg(3) - cid
только я уже говорил, что делается так

$items['ajax_publish/%ctools_js/comment/%comment'] // ссылка остается 'ajax_publish/nojs/comment/'. $cid

и в callback функцию передается объект коммента

function comments_publish_ajax_callback($js = FALSE, $comment) {
  dpm($comment);
}

сделала все, как указано выше. на выходе вот что получилось:
... (Array, 4 elements)
form (Array, 26 elements)
form_state (Array, 22 elements)
cid (NULL)
comment (Boolean) FALSE

Аватар пользователя Виктория Виктория 2 апреля 2015 в 17:27

Почему,в результате выполнения этой функции:
function comments_publish_ajax_callback($js = FALSE, $comment) {
dpm($comment);
}

при нажатии на ссылку к любому комменту, на выходе значение 1?