allon925 Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 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> В итоге файл загружается на сервер в указанную папку, но не могу разобраться с тем как картинку добавить в админку в раздел обратной связи. Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 18 мая, 2014 api/Feedbacks.phpФунkции get_feedback и get_feedbacks Цитата Ссылка на сообщение Поделиться на другие сайты
allon925 Опубликовано 18 мая, 2014 Автор Жалоба Поделиться Опубликовано 18 мая, 2014 Я правильно понимаю, что функция get_feedback получает id записи, производит выборку в базе и возвращает эту запись.в запрос в 2-х функциях добавил: f.image. Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 18 мая, 2014 Да, все правильно. Цитата Ссылка на сообщение Поделиться на другие сайты
allon925 Опубликовано 18 мая, 2014 Автор Жалоба Поделиться Опубликовано 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 что я забываю? Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 18 мая, 2014 Все должно работать, поле в базе image? Цитата Ссылка на сообщение Поделиться на другие сайты
allon925 Опубликовано 18 мая, 2014 Автор Жалоба Поделиться Опубликовано 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} Цитата Ссылка на сообщение Поделиться на другие сайты
allon925 Опубликовано 18 мая, 2014 Автор Жалоба Поделиться Опубликовано 18 мая, 2014 Где еще может быть ошибка? Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 18 мая, 2014 Т.е. {$feedback->image} не выводит название картинки? Цитата Ссылка на сообщение Поделиться на другие сайты
allon925 Опубликовано 18 мая, 2014 Автор Жалоба Поделиться Опубликовано 18 мая, 2014 Насколько я понимаю в базе данных хранится путь до картинки. Я хочу добавить само изображение в админку в раздел обратной связи.. {$feedback->image} - не выводит ничего при добавлениии сообщения в форму обратной связи. Однако на сервере картинка есть. Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 18 мая, 2014 В базе хранится только имя картинки.Надо типа такого$image = $this->request->files('image');$feedback->image = $image['name']; Цитата Ссылка на сообщение Поделиться на другие сайты
allon925 Опубликовано 18 мая, 2014 Автор Жалоба Поделиться Опубликовано 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 , что изменить чтобы сама картинка изображение приходило. Заранее благодарен за ответ. Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 18 мая, 2014 Прописать путь к картинке, по примеру того, как это сделано в Брендах или Категориях. Цитата Ссылка на сообщение Поделиться на другие сайты
allon925 Опубликовано 18 мая, 2014 Автор Жалоба Поделиться Опубликовано 18 мая, 2014 сейчас возвращается files/feedbacks/7.png как прописать от корня, какая конструкция. Но даже если я конкатенирую и делаю от корня все равно получаю ссылку на изображение, а не само изображение. Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 18 мая, 2014 Жалоба Поделиться Опубликовано 18 мая, 2014 :-) Цитата Ссылка на сообщение Поделиться на другие сайты
allon925 Опубликовано 18 мая, 2014 Автор Жалоба Поделиться Опубликовано 18 мая, 2014 Да глупый вопрос, все добавил, все заработало. Спасибо. Цитата Ссылка на сообщение Поделиться на другие сайты
Марченко Опубликовано 25 февраля, 2015 Жалоба Поделиться Опубликовано 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, и такие, хоть на работопригодность и не сказывающиеся, но все же косяки... это ведь не первая версия движка... Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 25 февраля, 2015 Жалоба Поделиться Опубликовано 25 февраля, 2015 Не понимаю, в чем проблема?Вы заплатили за КМС? Если да, то чем вы недовольны?Если нет - то вопросов нет. Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 25 февраля, 2015 Жалоба Поделиться Опубликовано 25 февраля, 2015 что то тут не так)))) "отображение статей"....Ошибка самая пустяковая - в комментарии.хоть на работопригодность и не сказывающиесяБывают же такие капризные... Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.