-
Публикаций
280 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные n1c
-
-
Надо ж не по верхам смотреть, а поглубже - проверять, есть ли вообще попытка сохранения и если есть, то каким запросом...
а не подскажете как это сделать?
-
С ходу видно, что вызов
foreach($this->products->get_self_products_blog($product->id) as $p)
явно неправильный.
А судя по Вашему подходу, скорее всего, еще масса ошибок есть...
тю, точно))) спасибо за наводку))
убрал ошибку 500.
просмотрел код далее но не вижу причину почему не сохраняет в БД =(
-
Подскажите пожалуйста. Делаю связанные товары в блоге. В админке выводится, но в БД не сохраняет (после нажатия на сохранить, товар есть, а при обновлении страницы его нет)
в конец api/Blog.php вставил
public function get_self_products_blog($product_id = array()) { if(empty($product_id)) return array(); $product_id_filter = $this->db->placehold('AND product_id in(?@)', (array)$product_id); $query = $this->db->placehold("SELECT product_id, related_id, position FROM __self_products_blog WHERE 1 $product_id_filter ORDER BY position "); $this->db->query($query); return $this->db->results(); } public function add_self_product_blog($product_id, $related_id, $position=0) { $query = $this->db->placehold("INSERT IGNORE INTO __self_products_blog SET product_id=?, related_id=?, position=?", $product_id, $related_id, $position); $this->db->query($query); return $related_id; } public function delete_self_product_blog($product_id, $related_id) { $query = $this->db->placehold("DELETE FROM __self_products_blog WHERE product_id=? AND related_id=? LIMIT 1", intval($product_id), intval($related_id)); $this->db->query($query); }
и еще ошибку 500 в записи дает, не пойму почему
view/BlogView.php
перед:
// Соседние записи $this->design->assign('next_post', $this->blog->get_next_post($post->id)); $this->design->assign('prev_post', $this->blog->get_prev_post($post->id));
вставляю:
$self_ids = array(); $self_products_blog = array(); foreach($this->products->get_self_products_blog($product->id) as $p) { $self_ids[] = $p->related_id; $self_products_blog[$p->related_id] = null; } if(!empty($self_ids)) { foreach($this->products->get_products(array('id'=>$self_ids, 'in_stock'=>1, 'visible'=>1)) as $p) $self_products_blog[$p->id] = $p; $self_products_blog_images = $this->products->get_images(array('product_id'=>array_keys($self_products_blog))); foreach($self_products_blog_images as $self_product_blog_image) if(isset($self_products_blog[$self_product_blog_image->product_id])) $self_products_blog[$self_product_blog_image->product_id]->images[] = $self_product_blog_image; $self_products_blog_variants = $this->variants->get_variants(array('product_id'=>array_keys($self_products_blog), 'in_stock'=>1)); foreach($self_products_blog_variants as $self_product_blog_variant) { if(isset($self_products_blog[$self_product_blog_variant->product_id])) { $self_products_blog[$self_product_blog_variant->product_id]->variants[] = $self_product_blog_variant; } } foreach($self_products_blog as $id=>$s) { if(is_object($s)) { $s->image = &$s->images[0]; $s->variant = &$s->variants[0]; } else { unset($self_products_blog[$id]); } } $this->design->assign('self_products_blog', $self_products_blog); }
-
У кого-то получилось?
Обязательно версия php должна быть 5.6 и выше? или можно ниже?
-
Могу предложить платное решение потому как тут простой маленькой инструкцией не обойтись, нужно вносить огромное количество изменений в движке и БД.
а Title, h1 меняется? или не настроено? цена решения?
-
Отличное решение
нужно еще сделать в фильтрации и сортировке с:
http://simpla-url-rewrite.webtask.pro/catalog/mobilnye-telefony?4=Android+2.3
на:
http://simpla-url-rewrite.webtask.pro/catalog/mobilnye-telefony/Android_2.3
-
Добрый день, форумчане.
Подскажите пожалуйста, как сделать статус "Резерв" в карточке товара, если количество было 1шт, а после заказа пока статус не перейдет в "Выполненные" то будет показываться резерв?
-
Подскажите пожалуйста, как сделать вывод 4го уровня подкатегории, чтобы 4й уровень показывался на странице той категории которой принадлежит а не на всех?
Типа:
- Женская
-- Обувь
--- Кроссовки (тут отображается 4й уровень)
---- Летние (4 уровень)
сделал. кому надо в products.tpl:
{if $categories} {if $category->subcategories} {foreach from=$category->subcategories item=n} <a href="catalog/{$n->url}" category_id="{$n->id}"> {$n->name} </a> {/foreach} {/if} {/if}
-
Подскажите пожалуйста, как сделать вывод 4го уровня подкатегории, чтобы 4й уровень показывался на странице той категории которой принадлежит а не на всех?
Типа:
- Женская
-- Обувь
--- Кроссовки (тут отображается 4й уровень)
---- Летние (4 уровень)
-
-
А как сделать для категории? чтобы выводило не одного товара, а товары категории типа: кроссовки от 100 до 100000 ?
сделал
кому нужно:
{if $products} {$min = 0} {$max = 0} {foreach $products as $product} {if $min == 0 || $min > $product->variant->price} {$min = $product->variant->price} {/if} {if $max == 0 || $max < $product->variant->price} {$max = $product->variant->price} {/if} {/foreach} {if $min < $max} {$min|convert} ... {$max|convert} {$currency->sign|escape} {else} {$product->variant->price|convert} {$currency->sign|escape} {/if} {/if}
-
А как сделать для категории? чтобы выводило не одного товара, а товары категории типа: кроссовки от 100 до 100000 ?
-
Подскажите пожалуйста, если хочу вывести какие бренды представлены в категории
к примеру: nike, adidas, puma
делаю вывод:
{foreach $products as $p} {$p->brand}{if !$p@last}, {/if} {/foreach}
но выводит количество бренда от количества товара
вот так: nike, nike, nike, nike, adidas, puma
как вывести нормально?
-
Друзья, а подскажите пожалуйста, как выводить комментарии в ЛК которые написал пользователь?
решил, уже не актуально))
-
Друзья, а подскажите пожалуйста, как выводить комментарии в ЛК которые написал пользователь?
-
добавил в Categories.php c.discount
далее вывел в шаблон {if $category->discount}{$v->price-($v->price/100*$category->discount)|convert}{else}{$v->price|convert}{/if}
но стоит зайти в категорию где вся обувь то цена старая, если зайти в "кроссовки" - выводится со скидкой, почему так?
-
Как-то запутанно Вы расписали.
Переформулируйте ещё раз.
в настройках админку сделал несколько значений:
{$settings->microvolnovka} (1500)
{$settings->fen} (500){$settings->stiralka} (2000)
{$settings->drel} (1500)
{$settings->komputer} (500)
где цифры это мощность в Втпри создании нового товара в вариантах товара "variant_name" указал максимальную мощность (3000 Вт)теперь хочу чтобы на странице товаров было что-то на подобии фильтрациичтобы клиент мог выбрать через checkbox к примеру:{$settings->microvolnovka} (1500)+{$settings->fen} (500)+{$settings->komputer} (500) = 2500 Вт
если 2500 Вт значит выводим товары у которых указан variant_name не выше 2500 Вт
-
Добрый день, форумчане.
Сделал в настройках вывод мощностей:
{$settings->microvolnovka} (1500){$settings->fen} (500)
{$settings->stiralka} (2000)
{$settings->drel} (1500)
{$settings->komputer} (500)В товаре variant_name вывел максимальную мощность (3000)Подскажите пожалуйста, как сделать, чтобы от выбранного из настроек мощностей (к примеру 1500+500+500), на странице products.tpl выводился товар variant_name которого до 3000 ? -
Это тоже неверно...
<input name="new[name][]" type="text" value="{$new->name|escape}" /> ?
тоже не работает
-
Так у Вас явно поля редактирования
<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}" />
верно же оформлено, а все равно не работает(
-
А если у Вас так нестандартно, то надо бы и шаблон показывать...
в 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}
-
Похоже, у Вас все сильно напутано.
Что касается последнего фрагмента кода, то в нем первая часть
if($this->request->method('post'))
{
...
}
должна быть в /simpla/NewAdmin.php, а вторая - в /simpla/NewsAdmin.php.
Смотрите, как сделано стандартно в Simpla (например, при редактировании брендов) и действуйте по образцу...
у меня только один файл NewsAdmin.php (я выше забыл добавить s в News)
-
в 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'); } } ?>
-
Привет, Друзья!
Столкнулся с проблемой. При заполнении формы на сайте, нужна возможность редактирования ее в админке.
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}" />
[2.*] Вторые связанные товары
в Готовые решения
Опубликовано
Огромное спасибо!!!