n1c Опубликовано 25 декабря, 2019 Жалоба Поделиться Опубликовано 25 декабря, 2019 (изменено) Привет, Друзья!Столкнулся с проблемой. При заполнении формы на сайте, нужна возможность редактирования ее в админке. NewView.php <?PHP require_once('View.php'); class NewView extends View { function fetch() { $new = new stdClass; if($this->request->method('post') && $this->request->post('new')) { $new = new stdClass(); $new->phone = $this->request->post('phone'); $new->name = $this->request->post('name'); $new->form_1 = $this->request->post('form_1'); $new->form_2 = $this->request->post('form_2'); $new->form_3 = $this->request->post('form_3'); $this->design->assign('name', $new->name); //$new_id = $this->news->add_new($new); if($new_id = $this->news->update_new($new_id, array('name'=>$new->name, 'email'=>$new->email))) { $this->new = $this->users->get_new(intval($new_id)); $this->design->assign('name', $new->name); $this->design->assign('email', $new->email); } else $this->design->assign('error', 'unknown error'); // Отправляем email $this->news->email_new_admin($new_id); } if($this->page) { $this->design->assign('meta_title', $this->page->meta_title); $this->design->assign('meta_keywords', $this->page->meta_keywords); $this->design->assign('meta_description', $this->page->meta_description); } $body = $this->design->fetch('new.tpl'); return $body; } } api/New.php <?php require_once('Simpla.php'); class News extends Simpla { public function get_new($id) { $query = $this->db->placehold("SELECT c.id, c.name, c.ip, c.form_1, c.form_2, c.form_3, c.processed FROM __news c WHERE id=? LIMIT 1 ", intval($id)); if($this->db->query($query)) { return $this->db->result(); } else { return false; } } public function get_news($filter = array(), $new_on_top = false) { // По умолчанию $limit = 1000; $page = 1; $processed = ''; if(isset($filter['limit'])) { $limit = max(1, intval($filter['limit'])); } if(isset($filter['page'])) { $page = max(1, intval($filter['page'])); } if(isset($filter['processed'])) { $processed = $this->db->placehold('AND processed=?',$filter['processed']); } $sql_limit = $this->db->placehold(' LIMIT ?, ? ', ($page-1)*$limit, $limit); if($new_on_top) { $sort='DESC'; } else { $sort='ASC'; } $query = $this->db->placehold("SELECT c.id, c.name, c.ip, c.form_1, c.form_2, c.form_3, c.processed FROM __news c WHERE 1 $processed ORDER BY c.id $sort $sql_limit "); $this->db->query($query); return $this->db->results(); } public function add_new($new) { $query = $this->db->placehold('INSERT INTO __news SET ?%, date = NOW()', $new); if(!$this->db->query($query)) { return false; } $id = $this->db->insert_id(); return $id; } public function update_new($id, $new) { $query = $this->db->placehold("UPDATE __news SET ?% $date_query WHERE id in(?@) LIMIT 1", $new, (array)$id); $this->db->query($query); return $id; } public function delete_new($id) { if(!empty($id)) { $query = $this->db->placehold("DELETE FROM __news WHERE id=? LIMIT 1", intval($id)); $this->db->query($query); } } } simpla/NewAdmin.php <?php require_once('api/Simpla.php'); class NewsAdmin extends Simpla { public function fetch() { $new = new stdClass; if(!empty($_POST['new_info'])) { $new->id = $this->request->post('id', 'integer'); $new->enabled = $this->request->post('enabled'); $new->name = $this->request->post('name'); $new->email = $this->request->post('email'); ## Не допустить одинаковые email пользователей. if(empty($new->name)) { $this->design->assign('message_error', 'empty_name'); } elseif(empty($new->email)) { $this->design->assign('message_error', 'empty_email'); } elseif(($u = $this->news->get_new($new->email)) && $u->id!=$new->id) { $this->design->assign('message_error', 'login_existed'); } else { $new->id = $this->news->update_new($new_id, $new); $this->design->assign('message_success', 'updated'); $new = $this->news->get_new(intval($new_id)); } } elseif($this->request->method('post')) { // Действия с выбранными $ids = $this->request->post('check'); if(!empty($ids)) { switch($this->request->post('action')) { case 'delete': { foreach($ids as $id) { $this->news->delete_new($id); } break; } case 'processed': { foreach ($ids as $id) { $this->news->update_new($id, array('processed'=>1)); } break; } } } } // Отображение $filter = array(); $filter['page'] = max(1, $this->request->get('page', 'integer')); $filter['limit'] = 200; //$news_count = $this->news->count_news($filter); // Показать все страницы сразу if($this->request->get('page') == 'all') { $filter['limit'] = $news_count; } $news = $this->news->get_news($filter, true); $this->design->assign('pages_count', ceil($news_count/$filter['limit'])); $this->design->assign('current_page', $filter['page']); $this->design->assign('news', $news); $this->design->assign('news_count', $news_count); return $this->design->fetch('news.tpl'); } } ?> в базу передает, все работает, но в админке не могу отредактировать, чтобы сохранило в базу новое значение <input name="name" class="simpla_inp " type="text" value="{$new->name|escape}" /> Изменено 25 декабря, 2019 пользователем n1c Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 25 декабря, 2019 Жалоба Поделиться Опубликовано 25 декабря, 2019 в simpla/NewAdmin.php заменить if(!empty($_POST['new_info'])) на if($this->request->method('post')) далее по коду убрать непонятно что elseif($this->request->method('post')) {// Действия с выбранными и закрывашку } Цитата Ссылка на сообщение Поделиться на другие сайты
n1c Опубликовано 26 декабря, 2019 Автор Жалоба Поделиться Опубликовано 26 декабря, 2019 в simpla/NewAdmin.php заменить if(!empty($_POST['new_info'])) на if($this->request->method('post')) далее по коду убрать непонятно что elseif($this->request->method('post')) {// Действия с выбранными и закрывашку } не помогло((( вот сейчас мой код в /simpla/NewsAdmin.php <?php require_once('api/Simpla.php'); class NewsAdmin extends Simpla { public function fetch() { //$new = new stdClass; if($this->request->method('post')) { $new->id = $this->request->post('id', 'integer'); $new->enabled = $this->request->post('enabled'); $new->name = $this->request->post('name'); $new->email = $this->request->post('email'); ## Не допустить одинаковые email пользователей. if(empty($new->name)) { $this->design->assign('message_error', 'empty_name'); } elseif(empty($new->email)) { $this->design->assign('message_error', 'empty_email'); } elseif(($u = $this->news->get_new($new->email)) && $u->id!=$new->id) { $this->design->assign('message_error', 'login_existed'); } else { $new->id = $this->news->update_new($new_id, $new); $this->design->assign('message_success', 'updated'); $new = $this->news->get_new(intval($new_id)); } } // Отображение $filter = array(); $filter['page'] = max(1, $this->request->get('page', 'integer')); $filter['limit'] = 200; //$news_count = $this->news->count_news($filter); // Показать все страницы сразу if($this->request->get('page') == 'all') { $filter['limit'] = $news_count; } $news = $this->news->get_news($filter, true); $this->design->assign('pages_count', ceil($news_count/$filter['limit'])); $this->design->assign('current_page', $filter['page']); $this->design->assign('news', $news); $this->design->assign('news_count', $news_count); return $this->design->fetch('news.tpl'); } } ?> Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 26 декабря, 2019 Жалоба Поделиться Опубликовано 26 декабря, 2019 Похоже, у Вас все сильно напутано. Что касается последнего фрагмента кода, то в нем первая частьif($this->request->method('post')){...}должна быть в /simpla/NewAdmin.php, а вторая - в /simpla/NewsAdmin.php. Смотрите, как сделано стандартно в Simpla (например, при редактировании брендов) и действуйте по образцу... Цитата Ссылка на сообщение Поделиться на другие сайты
n1c Опубликовано 26 декабря, 2019 Автор Жалоба Поделиться Опубликовано 26 декабря, 2019 Похоже, у Вас все сильно напутано. Что касается последнего фрагмента кода, то в нем первая частьif($this->request->method('post')){...}должна быть в /simpla/NewAdmin.php, а вторая - в /simpla/NewsAdmin.php. Смотрите, как сделано стандартно в Simpla (например, при редактировании брендов) и действуйте по образцу... у меня только один файл NewsAdmin.php (я выше забыл добавить s в News) Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 26 декабря, 2019 Жалоба Поделиться Опубликовано 26 декабря, 2019 А если у Вас так нестандартно, то надо бы и шаблон показывать... Цитата Ссылка на сообщение Поделиться на другие сайты
n1c Опубликовано 26 декабря, 2019 Автор Жалоба Поделиться Опубликовано 26 декабря, 2019 А если у Вас так нестандартно, то надо бы и шаблон показывать... в simpla/design/news.tpl {* Вкладки *} {capture name=tabs} {if in_array('comments', $manager->permissions)}<li><a href="index.php?module=CommentsAdmin">Комментарии</a></li>{/if} <li class="active"><a href="index.php?module=NewsAdmin">Анкета</a></li> {/capture} {* Title *} {$meta_title='Анкета' scope=parent} <div id="header"> {if $news_count} <h1>{$news_count} {$news_count|plural:'заявка':'заявки':'заявок'}</h1> {else} {/if} </div> <div id="main_list"> <form method="post" action="{url module=ExportnewsAdmin}" target="_blank"> <input type="hidden" name="session_id" value="{$smarty.session.id}"> <input type="image" src="./design/images/export_excel.png" name="export" title="Экспортировать"> </form><br><br> {include file='pagination.tpl'} {if $news} <form id="list_form" method="post"> <input type="hidden" name="session_id" value="{$smarty.session.id}"/> <div id="list" class="sortable"> {foreach $news as $new} <div class="{if !$new->processed}unapproved{/if} row"> <div class="checkbox cell"> <input type="checkbox" id="{$new->id}" name="check[]" value="{$new->id}"/> <label for="{$new->id}"></label> </div> <div class="name cell"> <div class='comment_name'> {$new->name|escape} <a class="approve" href="#">Обработать</a> </div> <style> {literal} table, td, th { border: 1px solid #ddd; text-align: left; } table { border-collapse: collapse; width: 100%; } th, td { padding: 15px; } {/literal}c </style> <table> <tr> <th>Вопрос</th> <th>Ответ</th> </tr> <tr> <td>{$settings->forms_news_1|escape}</td> <td><input name="name" class="simpla_inp " type="text" value="{$new->name|escape}" /></td> </tr> <tr> <td>{$settings->forms_news_2|escape}</td> <td> <input name="form_1" class="" type="text" value="{$new->form_1|escape|nl2br}" />. <input name="form_2" class="" type="text" value="{$new->form_2|escape|nl2br}" />. <input name="form_3" class="" type="text" value="{$new->form_3|escape|nl2br}" /> </td> </tr> <tr> <td>Заявка отправлена</td> <td>{$new->date|date} в {$new->date|time}</td> </tr> </table> </div> <div class="icons cell"> <a href='#' title='Удалить' class="delete"></a> </div> <div class="clear"></div> </div> {/foreach} </div> <div id="action"> <label id='check_all' class='dash_link'>Выбрать все</label> <span id=select> <select name="action"> <option value="processed">Отметить как обработанные</option> <option value="delete">Удалить</option> </select> </span> <input id='apply_action' class="button_green" type=submit value="Применить"> </div> </form> {else} Пусто {/if} {include file='pagination.tpl'} </div> {literal} <script> $(function() { // Раскраска строк function colorize() { $("#list div.row:even").addClass('even'); $("#list div.row:odd").removeClass('even'); } // Раскрасить строки сразу colorize(); // Выделить все $("#check_all").click(function() { $('#list input[type="checkbox"][name*="check"]').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:checked)').length>0); }); // Удалить $("a.delete").click(function() { $('#list input[type="checkbox"][name*="check"]').attr('checked', false); $(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true); $(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true); $(this).closest("form").submit(); }); // Обработать $("a.approve").click(function() { var line = $(this).closest(".row"); var id = line.find('input[type="checkbox"][name*="check"]').val(); line.addClass('loading_icon'); $.ajax({ type: 'POST', url: 'ajax/update_object.php', data: {'object': 'new', 'id': id, 'values': {'processed': 1}, 'session_id': '{/literal}{$smarty.session.id}{literal}'}, success: function(data){ line.removeClass('loading_icon'); line.removeClass('unapproved'); }, dataType: 'json' }); return false; }); // Подтверждение удаления $("form#list_form").submit(function() { if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление')) return false; }); }); </script> {/literal} Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 26 декабря, 2019 Жалоба Поделиться Опубликовано 26 декабря, 2019 Так у Вас явно поля редактирования<input name="form_1" class="" type="text" value="{$new->form_1|escape|nl2br}" />неверно оформлены. Смотрите в качестве примера, как стандартно на стр списка товаров в админке редактируются цены и кол-во товаров. Цитата Ссылка на сообщение Поделиться на другие сайты
n1c Опубликовано 26 декабря, 2019 Автор Жалоба Поделиться Опубликовано 26 декабря, 2019 Так у Вас явно поля редактирования<input name="form_1" class="" type="text" value="{$new->form_1|escape|nl2br}" />неверно оформлены. Смотрите в качестве примера, как стандартно на стр списка товаров в админке редактируются цены и кол-во товаров. Вот поле для имени - <input name="name" class="simpla_inp " type="text" value="{$new->name|escape}" />верно же оформлено, а все равно не работает( Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 26 декабря, 2019 Жалоба Поделиться Опубликовано 26 декабря, 2019 Это тоже неверно... Цитата Ссылка на сообщение Поделиться на другие сайты
n1c Опубликовано 26 декабря, 2019 Автор Жалоба Поделиться Опубликовано 26 декабря, 2019 Это тоже неверно... <input name="new[name][]" type="text" value="{$new->name|escape}" /> ?тоже не работает Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.