Подскажите пожалуйста как правильно записать условный оператор в этом примере: <script type="text/javascript"> $(document).ready(function () { $("button#send").click(function () { var text = $("#text").val(); $.ajax({ url: "?action=add-topic", type: "POST", data: {text: text}, dataType: "json", success: function (result) { if (result) { $('.bbp-body').remove(); $('.bbp-forums').append(function () { var res = ''; for (var i = 0; i < result.list.name.length; i++) { res += "<li class='bbp-body'><ul class='forum type-forum status-publish hentry loop-item-0 odd bbp-forum-status-open bbp-forum-visibility-publish'><li class='bbp-forum-info'><a class='bbp-forum-title' href='?action=view-topic&id=" + result.list.id[/i]/ + "'>" + result.list.name[/i/]/ + "</a></li>" + if(result.user.admin == 1){ + "<button class='bbp-forum-delete-topic' id='" + result.list.id + "'>Delete</button>" + } + "</ul></li>" } return res; }); $('button.bbp-forum-delete-topic').click(function (e) { e.preventDefault(); var parent = $(this).parent(); var id = $(this).attr("id"); let isConfirmed = confirm('Are you sure you want to delete this topic?'); if (isConfirmed) { $.ajax({ type: 'POST', url: '?action=delete-topic', data: {id: id}, beforeSend: function () { parent.animate({'backgroundColor': '#fb6c6c'}, 300); }, success: function () { parent.slideUp(300, function () { parent.remove(); }); } }); } }); console.log(result.user.admin); } else { alert(result.errors); } return false; } }); }); }); </script>[/I][/I]
изменить на Код (Javascript): res += "<li class='bbp-body'><ul class='forum type-forum status-publish hentry loop-item-0 odd bbp-forum-status-open bbp-forum-visibility-publish'><li class='bbp-forum-info'><a class='bbp-forum-title' href='?action=view-topic&id=" + result.list.id[/i]/ + "'>" + result.list.name/ + "</a></li>"; result_user_admin = ''; if(result.user.admin == 1){ result_user_admin = "<button class='bbp-forum-delete-topic' id='" + result.list.id + "'>Delete</button>" ; } res += result_user_admin + "</ul></li>"
У тебя result.list.name и result.user.admin это два массива? Просто ты приходишься по массиву result.list.name. Массив выглядит так?: Код (Javascript): var result = [ list : [ 'admin': '123', 'name': 'name', 'id': 'id' ] ] Если так, то проходись по list: Код (Javascript): var res = ''; for (var i = 0; i < result.list.length; i++) { var button = ''; if(result.user.admin[i] == 1){ button = "<button class='bbp-forum-delete-topic' id='" + result.list.id[i] + "'>Delete</button>"; } res += "<li class='bbp-body'>" +"<ul class='forum type-forum status-publish hentry loop-item-0 odd bbp-forum-status-open bbp-forum-visibility-publish'>" +"<li class='bbp-forum-info'><a class='bbp-forum-title' href='?action=view-topic&id=" + result.list.id[i] + "'>" + result.list.name[i] "</a></li>" + button + "</ul></li>" } } return res; А вообще такое на сервере делается, зачем на клиент js эту логику тащить? --- Добавлено --- Вот тоже самое на php: PHP: $array; // твой массив $result = ''; foreach($array['list'] as $item ){ $button = ''; if($item['admin'] == 1){ $button = "<button class='bbp-forum-delete-topic' id='".$item['id']."'>Delete</button>"; } $result .= "<li class='bbp-body'>" ."<ul class='forum type-forum status-publish hentry loop-item-0 odd bbp-forum-status-open bbp-forum-visibility-publish'>" ."<li class='bbp-forum-info'><a class='bbp-forum-title' href='?action=view-topic&id=".$item['id']."'>".$item['name']."</a></li>".$button."</ul></li>"; } return $result;
Спасибо всем за ответы. Boothooz спасибо что показал каким способом условный оператор можно вставить в эту конструкцию. Artur_hopf Все нужные данные подтягиваются с сервера с PHP при загрузке страницы а дальше я пользуюсь JS/Ajax для добавления новых тем в БД и соответственно на страницу а также удаления тем без перезагрузки. По другому как это возможно реализовать пока что, к сожалению, я не знаю. --- Добавлено --- Вот код целой страницы: <?php require_once ROOT . '/views/layouts/header.php' ?> <div class="container sitecontainer bgw"> <div class="row"> <div class="col-md-12 m22 single-post"> <div class="widget"> <div class="large-widget m30"> <div class="post-desc"> <div id="bbpress-forums"> <div class="table-responsive"> <ul class="bbp-forums"> <li class="bbp-header"> <ul class="forum-titles"> <li class="bbp-forum-info">Topics</li> <li class="bbp-forum-reply-count">Posts</li> <?php if ($user['admin'] == 1): ?> <li class="bbp-forum-delete-topic">Delete topic</li> <?php endif; ?> </ul> </li><!-- .bbp-header --> <?php foreach ($topicList as $topic): ?> <?php $id = $topic['id']; ?> <?php $total = Comment::getTotalComments($id); ?> <li class="bbp-body"> <ul class="forum type-forum status-publish hentry loop-item-0 odd bbp-forum-status-open bbp-forum-visibility-publish"> <li class="bbp-forum-info"> <a class="bbp-forum-title" href="?action=view-topic&id=<?php echo $topic['id'] ?>"> <?php echo $topic['name'] ?> </a> </li> <li class="bbp-forum-reply-count"><?php echo $total ?></li> <?php if ($user['admin'] == 1): ?> <button class="bbp-forum-delete-topic" id="<?php echo $topic['id'] ?>">Delete </button> <?php endif; ?> </ul><!-- end bbp forums --> </li> <?php endforeach; ?> </ul><!-- .forums-directory --> <div id="new-topic"></div> </div> </div> <!-- /bbpress --> </div> <!-- end post-desc --> </div> <!-- end large-widget --> </div> <!-- end widget --> <!--create topic--> <div class="form"> <p>Add topic</p> <p> <textarea name="text" id="text"></textarea> </p> <p> <button id="send">Send</button> </p> </div> <script type="text/javascript"> $(document).ready(function () { $("button#send").click(function () { var text = $("#text").val(); $.ajax({ url: "?action=add-topic", type: "POST", data: {text: text}, dataType: "json", success: function (result) { if (result) { jQuery('.bbp-body').remove(); jQuery('.bbp-forums').append(function () { var res = ''; for (var i = 0; i < result.list.name.length; i++) { result_user_admin = ''; if(result.user.admin == 1){ result_user_admin = "<button class='bbp-forum-delete-topic' id='" + result.list.id + "'>Delete</button>"; } res += "<li class='bbp-body'><ul class='forum type-forum status-publish hentry loop-item-0 odd bbp-forum-status-open bbp-forum-visibility-publish'><li class='bbp-forum-info'><a class='bbp-forum-title' href='?action=view-topic&id=" + result.list.id + "'>" + result.list.name + "</a></li>" + result_user_admin + "</ul></li>" } return res; }); $('button.bbp-forum-delete-topic').click(function (e) { e.preventDefault(); var parent = $(this).parent(); var id = $(this).attr("id"); let isConfirmed = confirm('Are you sure you want to delete this topic?'); if (isConfirmed) { $.ajax({ type: 'POST', url: '?action=delete-topic', data: {id: id}, beforeSend: function () { parent.animate({'backgroundColor': '#fb6c6c'}, 300); }, success: function () { parent.slideUp(300, function () { parent.remove(); }); } }); } }); console.log(result.user.admin); } else { alert(result.errors); } return false; } }); }); }); </script> <!--success: function () { $("#new-topic").append("<div class='text' style='border: 1px solid #F2F2F2; height: 80px; padding: 25px 5px 5px 20px; font-family: Verdana, Geneva, sans-serif; font-size: 18px'>" + text + "</div>"); $("textarea#text").val(""); }--> <!--end create topic--> </div> <!-- end col --> </div> <!-- end row --> </div> <!-- end container --> <!--script delete topic--> <script type="text/javascript"> $(document).ready(function () { $('button.bbp-forum-delete-topic').click(function (e) { e.preventDefault(); var parent = $(this).parent(); var id = $(this).attr("id"); let isConfirmed = confirm('Are you sure you want to delete this topic?'); if (isConfirmed) { $.ajax({ type: 'POST', url: '?action=delete-topic', data: {id: id}, beforeSend: function () { parent.animate({'backgroundColor': '#fb6c6c'}, 300); }, success: function () { parent.slideUp(300, function () { parent.remove(); }); } }); } }); }); </script> <!--end script delete topic--> <?php require_once ROOT . '/views/layouts/footer.php' ?>
@wade003 Вот смотри, ты возвращаешь с помощью ajax массив, потом на клиенте превращаешь его в html блоки. А почему ты это сразу не делаешь на сервере php?
Вот экшн: public function actionAddTopic() { $text = $_POST['text']; $date = date("Y-m-d H:i:s"); Topic::addTopic($text, $date); if(empty(User::checkLogged())){ $user['admin'] = null; }else{$user = User::checkLogged();} $topicList = array(); $topicList = Topic::test(); /*echo '<br>'; print_r($topicList); echo '<br>';*/ $errors = 'ok'; $out = array( 'errors' => $errors, 'list' => $topicList, 'user' => $user, ); header("Cotent-Type: text/json; charset=utf-8"); echo json_encode($out); return true; } --- Добавлено --- Ты имеешь ввиду в экшене? В переменную out поместить весь HTML/PHP код? Покажи пожалуйста как бы ты это сделал. Как реализовать учитывая MVC и ООП?
@wade003 в массиве полюбому есть ошибки, но как то так: PHP: public function actionAddTopic(){ $text = $_POST['text']; $date = date("Y-m-d H:i:s"); Topic::addTopic($text, $date); if(empty(User::checkLogged())){ $user['admin'] = null; }else{ $user = User::checkLogged(); } $topicList = array(); $topicList = Topic::test(); $errors = 'ok'; $out = array( 'errors' => $errors, 'list' => $topicList, 'user' => $user, ); return $out; } public function createAddTopic(){ $topic = Topic::actionAddTopic(); $result = ''; foreach($topic->list as $item ){ $button = ''; if($topic->user[0]['admin'] == 1){ $button = "<button class='bbp-forum-delete-topic' id='".$item['id']."'>Delete</button>"; } $result .= "<li class='bbp-body'>" ."<ul class='forum type-forum status-publish hentry loop-item-0 odd bbp-forum-status-open bbp-forum-visibility-publish'>" ."<li class='bbp-forum-info'><a class='bbp-forum-title' href='?action=view-topic&id=".$item['id']."'>".$item['name']."</a></li>".$button."</ul></li>"; } return json_encode($result); } Ajax запросом обращаешься уже к createAddTopic()
Оно просто создает твой массив. Который потом забирает функция createAddTopic() --- Добавлено --- Сейчас ты забираешь ajax этот массив, потом его обрабатывает клиент. А можно это сделать тупо на сервере,и возвращать клиенту готовый результат. --- Добавлено --- Единственное пост запрос надо добавить во 2ую функцию и передать его вот так: PHP: public function actionAddTopic($text){ $date = date("Y-m-d H:i:s"); Topic::addTopic($text, $date); if(empty(User::checkLogged())){ $user['admin'] = null; }else{ $user = User::checkLogged(); } $topicList = array(); $topicList = Topic::test(); $errors = 'ok'; $out = array( 'errors' => $errors, 'list' => $topicList, 'user' => $user, ); return $out; } public function createAddTopic(){ $text = $_POST['text']; $topic = Topic::actionAddTopic($text); $result = ''; foreach($topic->list as $item ){ $button = ''; if($topic->user[0]['admin'] == 1){ $button = "<button class='bbp-forum-delete-topic' id='".$item['id']."'>Delete</button>"; } $result .= "<li class='bbp-body'>" ."<ul class='forum type-forum status-publish hentry loop-item-0 odd bbp-forum-status-open bbp-forum-visibility-publish'>" ."<li class='bbp-forum-info'><a class='bbp-forum-title' href='?action=view-topic&id=".$item['id']."'>".$item['name']."</a></li>".$button."</ul></li>"; } return json_encode($result); } --- Добавлено --- Но говорю я там массив с ошибкой обрабатываю, переделай сам по структуре. Это у тебя фреймворк yii2?
Я сразу не понял. Возможно ты имел ввиду вместо $topic= Topic::actionAddTopic(); написать $topic = self::actionAddTopic(); или хотя бы все в одном экшене поместить?
Вот в идеале как должно быть: Экшн контроллер: PHP: public function actionAddTopic(){ $result = Topic::createAddTopic(); return json_encode($result); } Модель топик: PHP: public function getTopic($text){ $date = date("Y-m-d H:i:s"); Topic::addTopic($text, $date); if(empty(User::checkLogged())){ $user['admin'] = null; }else{ $user = User::checkLogged(); } $topicList = array(); $topicList = Topic::test(); $errors = 'ok'; $out = array( 'errors' => $errors, 'list' => $topicList, 'user' => $user, ); return $out; } public function createAddTopic(){ $text = $_POST['text']; $topic = Topic::actionAddTopic($text); $result = ''; foreach($topic->list as $item ){ $button = ''; if($topic->user[0]['admin'] == 1){ $button = "<button class='bbp-forum-delete-topic' id='".$item['id']."'>Delete</button>"; } $result .= "<li class='bbp-body'>" ."<ul class='forum type-forum status-publish hentry loop-item-0 odd bbp-forum-status-open bbp-forum-visibility-publish'>" ."<li class='bbp-forum-info'><a class='bbp-forum-title' href='?action=view-topic&id=".$item['id']."'>".$item['name']."</a></li>".$button."</ul></li>"; } return json_encode($result); } --- Добавлено --- И js запрос можно так записать: Код (Javascript): var text = $("#text").val(); $.post( "?action=add-topic", { text : text }, function( data ) { console.log(data); }, "json");
@wade003 ты заметил, что твой код выглядит хуже, чем код комментаторов? Оформляй код в [ php ] ... [ /php ] ( без пробелов ) тогда будет красиво и всем будет удобно тебе помогать. --- Добавлено --- Ещё можно [ code=JavaScript ] ... [ /code ] ( без пробелов ) --- Добавлено --- Не послушаешь - схлопочешь бан