allon925 Posted May 18, 2014 Report Share Posted May 18, 2014 Хочу добавить добавление картинки к форму обратной связи на страницу site.ru/contact:1. В таблицу добавил поле image.2. В шаблоне: добавил поле input и атрибут enctype к самой форме.3. Изменил запрос в файле: api/feedbacks.php в функции get_feedback в запрос добавил f.image.4. Файл view/feedbackView.php. <?PHP /** * Simpla CMS * * @copyright 2011 Denis Pikusov * @link http://simp.la * @author Denis Pikusov * * Отображение статей на сайте * Этот класс использует шаблоны articles.tpl и article.tpl * */ require_once('View.php'); class FeedbackView extends View { function fetch() { $feedback = new stdClass; if($this->request->method('post') && $this->request->post('feedback')) { $feedback->name = $this->request->post('name'); $feedback->email = $this->request->post('email'); $feedback->message = $this->request->post('message'); $feedback->image = $this->request->files('image'); $captcha_code = $this->request->post('captcha_code'); $image = $this->request->files('image'); $this->design->assign('name', $feedback->name); $this->design->assign('email', $feedback->email); $this->design->assign('message', $feedback->message); $this->design->assign('image', $feedback->image); if(!empty($image['name'])) { move_uploaded_file($image['tmp_name'], $this->root_dir.$this->config->feedback_images_dir.$image['name']); } if(empty($feedback->name)) $this->design->assign('error', 'empty_name'); elseif(empty($feedback->email)) $this->design->assign('error', 'empty_email'); elseif(empty($feedback->message)) $this->design->assign('error', 'empty_text'); elseif(empty($_SESSION['captcha_code']) || $_SESSION['captcha_code'] != $captcha_code || empty($captcha_code)) { $this->design->assign('error', 'captcha'); } else { $this->design->assign('message_sent', true); $feedback->ip = $_SERVER['REMOTE_ADDR']; $feedback_id = $this->feedbacks->add_feedback($feedback); // Отправляем email $this->notify->email_feedback_admin($feedback_id); // Приберем сохраненную капчу, иначе можно отключить загрузку рисунков и постить старую unset($_SESSION['captcha_code']); } } 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('feedback.tpl'); return $body; } } Добавил в файл:\simpla\design\html\feedbacks.tpl <div class='image'> {$feedback->image} </div> В итоге файл загружается на сервер в указанную папку, но не могу разобраться с тем как картинку добавить в админку в раздел обратной связи. Quote Link to post Share on other sites
Kosjak76 Posted May 18, 2014 Report Share Posted May 18, 2014 api/Feedbacks.phpФунkции get_feedback и get_feedbacks Quote Link to post Share on other sites
allon925 Posted May 18, 2014 Author Report Share Posted May 18, 2014 Я правильно понимаю, что функция get_feedback получает id записи, производит выборку в базе и возвращает эту запись.в запрос в 2-х функциях добавил: f.image. Quote Link to post Share on other sites
Kosjak76 Posted May 18, 2014 Report Share Posted May 18, 2014 Да, все правильно. Quote Link to post Share on other sites
allon925 Posted May 18, 2014 Author Report Share Posted May 18, 2014 Из класса Feedbacks: public function get_feedback($id) { $query = $this->db->placehold("SELECT f.id, f.image, f.name, f.email, f.ip, f.message, f.date FROM __feedbacks f WHERE id=? LIMIT 1", intval($id)); if($this->db->query($query)) return $this->db->result(); else return false; } public function get_feedbacks($filter = array(), $new_on_top = false) { // По умолчанию $limit = 0; $page = 1; $keyword_filter = ''; if(isset($filter['limit'])) $limit = max(1, intval($filter['limit'])); if(isset($filter['page'])) $page = max(1, intval($filter['page'])); $sql_limit = $this->db->placehold(' LIMIT ?, ? ', ($page-1)*$limit, $limit); if(!empty($filter['keyword'])) { $keywords = explode(' ', $filter['keyword']); foreach($keywords as $keyword) $keyword_filter .= $this->db->placehold('AND f.name LIKE "%'.$this->db->escape(trim($keyword)).'%" OR f.message LIKE "%'.$this->db->escape(trim($keyword)).'%" OR f.email LIKE "%'.$this->db->escape(trim($keyword)).'%" '); } if($new_on_top) $sort='DESC'; else $sort='ASC'; $query = $this->db->placehold("SELECT f.id, f.name, f.email, f.ip, f.message, f.date, f.image FROM __feedbacks f WHERE 1 $keyword_filter ORDER BY f.id $sort $sql_limit"); $this->db->query($query); return $this->db->results(); } функция function get_feedbacks насколько я понимаю возвращает все записи и потом по этим данным происходит фильтрация.Добавляю в шаблон вывода feedbacks.tpl <div class='image'> {$feedback->image} </div> но почему-то данные не попадают в {foreach $feedbacks as $feedback} в массив $feedbacks что я забываю? Quote Link to post Share on other sites
Kosjak76 Posted May 18, 2014 Report Share Posted May 18, 2014 Все должно работать, поле в базе image? Quote Link to post Share on other sites
allon925 Posted May 18, 2014 Author Report Share Posted May 18, 2014 Поле называется image. Вот файл feedbacks.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=FeedbacksAdmin">Обратная связь</a></li> {/capture} {* Title *} {$meta_title='Обратная связь' scope=parent} {* Поиск *} {if $feedbacks || $keyword} <form method="get"> <div id="search"> <input type="hidden" name="module" value='FeedbacksAdmin'> <input class="search" type="text" name="keyword" value="{$keyword|escape}" /> <input class="search_button" type="submit" value=""/> </div> </form> {/if} {* Заголовок *} <div id="header"> {if $feedbacks_count} <h1>{$feedbacks_count} {$feedbacks_count|plural:'сообщение':'сообщений':'сообщения'}</h1> {else} <h1>Нет сообщений</h1> {/if} </div> <div id="main_list"> <!-- Листалка страниц --> {include file='pagination.tpl'} <!-- Листалка страниц (The End) --> {if $feedbacks} <form id="list_form" method="post"> <input type="hidden" name="session_id" value="{$smarty.session.id}"> <div id="list" style="width:100%;"> {foreach $feedbacks as $feedback} <div class="row"> <div class="checkbox cell"> <input type="checkbox" name="check[]" value="{$feedback->id}" /> </div> <div class="name cell"> <div class='comment_name'> <a href="mailto:{$feedback->name|escape}<{$feedback->email|escape}>?subject=Вопрос от пользователя {$feedback->name|escape}">{$feedback->name|escape}</a> </div> <div class='comment_text'> {$feedback->message|escape|nl2br} </div> <div class='image'> {$feedback->image} </div> <div class='comment_info'> Сообщение отправлено {$feedback->date|date} в {$feedback->date|time} </div> </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="delete">Удалить</option> </select> </span> <input id='apply_action' class="button_green" type=submit value="Применить"> </div> </form> {else} Нет сообщений {/if} <!-- Листалка страниц --> {include file='pagination.tpl'} <!-- Листалка страниц (The End) --> </div> <!-- Меню --> <div id="right_menu"> </div> <!-- Меню (The End) --> {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.enable").click(function() { var icon = $(this); var line = icon.closest(".row"); var id = line.find('input[type="checkbox"][name*="check"]').val(); var state = line.hasClass('invisible')?1:0; icon.addClass('loading_icon'); $.ajax({ type: 'POST', url: 'ajax/update_object.php', data: {'object': 'blog', 'id': id, 'values': {'visible': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'}, success: function(data){ icon.removeClass('loading_icon'); if(state) line.removeClass('invisible'); else line.addClass('invisible'); }, dataType: 'json' }); return false; }); // Подтверждение удаления $("form#list_form").submit(function() { if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление')) return false; }); }); </script> {/literal} Quote Link to post Share on other sites
allon925 Posted May 18, 2014 Author Report Share Posted May 18, 2014 Где еще может быть ошибка? Quote Link to post Share on other sites
Kosjak76 Posted May 18, 2014 Report Share Posted May 18, 2014 Т.е. {$feedback->image} не выводит название картинки? Quote Link to post Share on other sites
allon925 Posted May 18, 2014 Author Report Share Posted May 18, 2014 Насколько я понимаю в базе данных хранится путь до картинки. Я хочу добавить само изображение в админку в раздел обратной связи.. {$feedback->image} - не выводит ничего при добавлениии сообщения в форму обратной связи. Однако на сервере картинка есть. Quote Link to post Share on other sites
Kosjak76 Posted May 18, 2014 Report Share Posted May 18, 2014 В базе хранится только имя картинки.Надо типа такого$image = $this->request->files('image');$feedback->image = $image['name']; Quote Link to post Share on other sites
allon925 Posted May 18, 2014 Author Report Share Posted May 18, 2014 файл:feedbackView.php исправил: <?PHP /** * Simpla CMS * * @copyright 2011 Denis Pikusov * @link http://simp.la * @author Denis Pikusov * * Отображение статей на сайте * Этот класс использует шаблоны articles.tpl и article.tpl * */ require_once('View.php'); class FeedbackView extends View { function fetch() { $feedback = new stdClass; if($this->request->method('post') && $this->request->post('feedback')) { $feedback->name = $this->request->post('name'); $feedback->email = $this->request->post('email'); $feedback->message = $this->request->post('message'); $captcha_code = $this->request->post('captcha_code'); $image = $this->request->files('image'); $feedback->image = $image['name']; $this->design->assign('name', $feedback->name); $this->design->assign('email', $feedback->email); $this->design->assign('message', $feedback->message); $this->design->assign('image', $feedback->image); if(!empty($image['name'])) { move_uploaded_file($image['tmp_name'], $this->root_dir.$this->config->feedback_images_dir.$image['name']); } if(empty($feedback->name)) $this->design->assign('error', 'empty_name'); elseif(empty($feedback->email)) $this->design->assign('error', 'empty_email'); elseif(empty($feedback->message)) $this->design->assign('error', 'empty_text'); elseif(empty($_SESSION['captcha_code']) || $_SESSION['captcha_code'] != $captcha_code || empty($captcha_code)) { $this->design->assign('error', 'captcha'); } else { $this->design->assign('message_sent', true); $feedback->ip = $_SERVER['REMOTE_ADDR']; $feedback_id = $this->feedbacks->add_feedback($feedback); // Отправляем email $this->notify->email_feedback_admin($feedback_id); // Приберем сохраненную капчу, иначе можно отключить загрузку рисунков и постить старую unset($_SESSION['captcha_code']); } } 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('feedback.tpl'); return $body; } } Теперь в админке приходит имя картинки: 1.jpg , что изменить чтобы сама картинка изображение приходило. Заранее благодарен за ответ. Quote Link to post Share on other sites
Kosjak76 Posted May 18, 2014 Report Share Posted May 18, 2014 Прописать путь к картинке, по примеру того, как это сделано в Брендах или Категориях. Quote Link to post Share on other sites
allon925 Posted May 18, 2014 Author Report Share Posted May 18, 2014 сейчас возвращается files/feedbacks/7.png как прописать от корня, какая конструкция. Но даже если я конкатенирую и делаю от корня все равно получаю ссылку на изображение, а не само изображение. Quote Link to post Share on other sites
Kosjak76 Posted May 18, 2014 Report Share Posted May 18, 2014 :-) Quote Link to post Share on other sites
allon925 Posted May 18, 2014 Author Report Share Posted May 18, 2014 Да глупый вопрос, все добавил, все заработало. Спасибо. Quote Link to post Share on other sites
Марченко Posted February 25, 2015 Report Share Posted February 25, 2015 /** * Simpla CMS * * @copyright 2011 Denis Pikusov * @link http://simp.la * @author Denis Pikusov * * Отображение статей на сайте * Этот класс использует шаблоны articles.tpl и article.tpl * */ require_once('View.php'); class FeedbackView extends View { function fetch() { $feedback = new stdClass; if($this->request->method('post') && $this->request->post('feedback')) { что то тут не так)))) "отображение статей".... платная CMS, и такие, хоть на работопригодность и не сказывающиеся, но все же косяки... это ведь не первая версия движка... Quote Link to post Share on other sites
Kosjak76 Posted February 25, 2015 Report Share Posted February 25, 2015 Не понимаю, в чем проблема?Вы заплатили за КМС? Если да, то чем вы недовольны?Если нет - то вопросов нет. Quote Link to post Share on other sites
Kors Posted February 25, 2015 Report Share Posted February 25, 2015 что то тут не так)))) "отображение статей"....Ошибка самая пустяковая - в комментарии.хоть на работопригодность и не сказывающиесяБывают же такие капризные... Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.