Наверно мне сложно выразить свои мысли так как я не профессионал. В базе данных есть продукты. Их нужно вывести на страницу. Я уже вывел, списком, типа ряд постов только в моем случае это только заголовки. Это понятно? Нужно сделать систему комментирования этих постов прямо в этом списке, не заходя на страницу отдельного поста. Мой список выводится циклом foreach и я просто взял и вставил форму добавления комментария в этот foreach. У меня получился этакий список названий с полями добавления комментариев. Написал логику, вроде сам процесс комментирования работает. Но, срабатывает форма добавления комментария только первого заголовка, даже когда я комментирую второй или третий заголовок. Как сделать чтобы срабатывало именно нужное поле.
Помогите пожалуйста! Вот контроллер:
function addcomraitAction() {
if (! empty($_POST['content'])) {
$content = isset($_POST['content']) ? $_POST['content'] : null;
$content = htmlspecialchars($content);
$user_id = isset($_POST['user_id']) ? $_REQUEST['user_id'] : null;
$user_id = intval($user_id);
$product_id = isset($_POST['product_id']) ? $_REQUEST['product_id'] : null;
$product_id = intval($product_id);
} else {
return false;
}
$result = insertComment($content, $user_id, $product_id);
if ($result) {
$resData['success'] = 1;
$resData['message'] = 'Комментарий добавлен';
}else{
$resData['success'] = 0;
$resData['message'] = 'Ошибка добавления комментария';
}
echo json_encode($resData);
return;
}
А вот так я вывожу на страницу:
{foreach $products as $item name=product}
<h2><a href="/product/page/{$item['id']}/">{$item['product']}</a></h2>
<div id="blockNewComment">
<form name="comment" action="" method="post">
<p>
<label>Комментарий:</label>
<br />
<textarea id="newContentComm" required name="content" cols="30" rows="3"></textarea>
</p>
<p>
<input id="newProductId" type="hidden" name="product_id" value="{$item['id']}" />
<input id="newUserId" type="hidden" name="user_id" value="{$authUser['id']}" />
<input type="submit" onclick="newComment();" value="Отправить" />
</p>
</form>
</div>
{/foreach}
Ajax:
function newComment() {
var content = $('#newContentComm').val();
var product_id = $('#newProductId').val();
var user_id = $('#newUserId').val();
var postData = {content: content, product_id: product_id, user_id: user_id};
$.ajax({
type: 'POST',
async: false,
url: "/product/addcomrait/",
data: postData,
dataType: 'json',
success: function(data) {
alert(data['message']);
if(data['success']) {
$('#newContentComm').val('');
$('#newProductId').val('');
$('#newUserId').val('');
}
}
});
}
Добрый вечер. Ваша проблема в том, что форм для комментариев много (для каждого поста своя, а вот у полей ввода один и тот же id. Когда вы пишете $('#newContentComm').val();
всегда берется значение из первого элемента у которого такой id. По этой причине всегда срабатывает только форма от первого коммента. Исправить это можно несколькими способами.
1. Добавить в id полей ввода id товара, чтобы получалось что-то вроде newContentComm_31415
Остановимся подробнее на первом варианте.
Вывод вашей страницы поменяется так:
{foreach $products as $item name=product
<h2><a href="/product/page/{$item['id']}/">{$item['product']}</a></h2>
<div id="blockNewComment">
<form name="comment" action="" method="post">
<p>
<label>Комментарий:</label> <br />
<textarea id="newContentComm{$item['id']}" required name="content" cols="30" rows="3"></textarea>
</p>
<p>
<input id="newUserId" type="hidden" name="user_id" value="{$authUser['id']}" />
<input type="submit" onclick="newComment({$item['id']});" value="Отправить" />
</p>
</form>
</div>
{/foreach}
Тогда соответственно js код поменяется так:
function newComment(id) {
var content = $('#newContentComm'+id).val();
var user_id = $('#newUserId').val();
var postData = {content: content, product_id: id, user_id: user_id};
$.ajax({ type: 'POST', async: false,
url: "/product/addcomrait/", data: postData, dataType: 'json',
success: function(data){
alert(data['message']);
if(data['success']) {
$('#newContentComm'+id).val(''); } } }); }
Прошу прощение за форматирование кода. Пишу с телефона, не очень удобно тут писать его)
Что изменилось: теперь функция добавления комментария принимает на вход id товара к которому отправляется комментарий. Исходя из id берется значение из нужного textarea. user_id не дублировал, т.к. полагаю во всех формах значение этого поля одинаковое. Ну и поменялся обработчик onclick, чтобы в функцию передавался id товара.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Подскажите, как правильно подключить единственный скрипт в плагине? Те
Подскажите пожалуйста! Нужно получить с сайта: https://investorshubadvfn
Есть таблица состоящая из колонок firstname lastnameкак при запросе Users::find()->all(); получить в ответе еще одну колонку fullname