Перейти к содержанию
Официальный форум поддержки Simpla

n1c

Пользователь
  • Публикаций

    280
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные n1c

  1.  

    Надо ж не по верхам смотреть, а поглубже - проверять, есть ли вообще попытка сохранения и если есть, то каким запросом...

     

    а не подскажете как это сделать?

  2. С ходу видно, что вызов

    foreach($this->products->get_self_products_blog($product->id) as $p)

    явно неправильный.

    А судя по Вашему подходу, скорее всего, еще масса ошибок есть...

     

    тю, точно))) спасибо за наводку))

    убрал ошибку 500.

    просмотрел код далее но не вижу причину почему не сохраняет в БД =(

  3. Подскажите пожалуйста. Делаю связанные товары в блоге. В админке выводится, но в БД не сохраняет (после нажатия на сохранить, товар есть, а при обновлении страницы его нет)

     

    в конец 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);
    }
    

     

  4. Могу предложить платное решение потому как тут простой маленькой инструкцией не обойтись, нужно вносить огромное количество изменений в движке и БД.

     

    а Title, h1 меняется? или не настроено? цена решения?

  5. Добрый день, форумчане.

    Подскажите пожалуйста, как сделать статус "Резерв" в карточке товара, если количество было 1шт, а после заказа пока статус не перейдет в "Выполненные" то будет показываться резерв?

  6.  

    Подскажите пожалуйста, как сделать вывод 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} 
    
  7. Подскажите пожалуйста, как сделать вывод 4го уровня подкатегории, чтобы 4й уровень показывался на странице той категории которой принадлежит а не на всех?


    Типа:


    - Женская


    -- Обувь


    --- Кроссовки (тут отображается 4й уровень)


    ---- Летние (4 уровень)


  8. А как сделать для категории? чтобы выводило не одного товара, а товары категории типа: кроссовки от 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}
    
  9. Подскажите пожалуйста, если хочу вывести какие бренды представлены в категории

    к примеру: nike, adidas, puma

     

    делаю вывод:

    {foreach $products as $p}
    {$p->brand}{if !$p@last}, {/if}
    {/foreach}
    

     

    но выводит количество бренда от количества товара

    вот так: nike, nike, nike, nike, adidas, puma

     

    как вывести нормально?

  10. добавил в Categories.php c.discount

    далее вывел в шаблон {if $category->discount}{$v->price-($v->price/100*$category->discount)|convert}{else}{$v->price|convert}{/if}

    но стоит зайти в категорию где вся обувь то цена старая, если зайти в "кроссовки" - выводится со скидкой, почему так?

  11. Как-то запутанно Вы расписали.

    Переформулируйте ещё раз.

     

    в настройках админку сделал несколько значений:

    {$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 Вт

     
  12. Добрый день, форумчане.
    Сделал в настройках вывод мощностей: 
    {$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 ?

     

  13. Так у Вас явно поля редактирования

    <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}" />

    верно же оформлено, а все равно не работает(

  14. А если у Вас так нестандартно, то надо бы и шаблон показывать...

     

    в 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}
    
    
  15. Похоже, у Вас все сильно напутано.

     

    Что касается последнего фрагмента кода, то в нем первая часть

    if($this->request->method('post'))

    {

    ...

    }

    должна быть в /simpla/NewAdmin.php, а вторая - в /simpla/NewsAdmin.php.

     

    Смотрите, как сделано стандартно в Simpla (например, при редактировании брендов) и действуйте по образцу...

     

    у меня только один файл NewsAdmin.php (я выше забыл добавить s в News)

  16. в 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');
        }
        
    }
    
    ?>
    
  17. Привет, Друзья!

    Столкнулся с проблемой. При заполнении формы на сайте, нужна возможность редактирования ее в админке.

     

    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');
        }
        
    }
    
    ?>
    

     

     

    в базу передает, все работает, но в админке не могу отредактировать, чтобы сохранило в базу новое значение  :unsure:

    <input name="name" class="simpla_inp " type="text" value="{$new->name|escape}" />

×
×
  • Создать...