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

Включение и выключение брендов в админке


Рекомендуемые сообщения

 

файл admin/BrandAdmin.php покажите

<?php
 
require_once('api/Newcms.php');
 
 
############################################
# Class Category - Edit the good gategory
############################################
class BrandAdmin extends Newcms
{
  private $allowed_image_extentions = array('png', 'gif', 'jpg', 'jpeg', 'ico');
 
  function fetch()
  {
          $brand = new stdClass;
        if($this->request->method('post'))
        {
            $brand->id = $this->request->post('id', 'integer');
            $brand->name = $this->request->post('name');
            $brand->description = $this->request->post('description');
 
            $brand->url = $this->request->post('url', 'string');
            $brand->meta_title = $this->request->post('meta_title');
            $brand->meta_keywords = $this->request->post('meta_keywords');
            $brand->meta_description = $this->request->post('meta_description');
            
            // Не допустить одинаковые URL разделов.
            if(($c = $this->brands->get_brand($brand->url)) && $c->id!=$brand->id)
            {            
                $this->design->assign('message_error', 'url_exists');
            }
            else
            {
                if(empty($brand->id))
                {
                      $brand->id = $this->brands->add_brand($brand);
                    $this->design->assign('message_success', 'added');
                  }
                  else
                  {
                      $this->brands->update_brand($brand->id, $brand);
                    $this->design->assign('message_success', 'updated');
                  }    
                  // Удаление изображения
                  if($this->request->post('delete_image'))
                  {
                      $this->brands->delete_image($brand->id);
                  }
                  // Загрузка изображения
                  $image = $this->request->files('image');
                  if(!empty($image['name']) && in_array(strtolower(pathinfo($image['name'], PATHINFO_EXTENSION)), $this->allowed_image_extentions))
                  {
                      $this->brands->delete_image($brand->id);                       
                      move_uploaded_file($image['tmp_name'], $this->root_dir.$this->config->brands_images_dir.$image['name']);
                      $this->brands->update_brand($brand->id, array('image'=>$image['name']));
                  }
                  $brand = $this->brands->get_brand($brand->id);
            }
        }
        else
        {
            $brand->id = $this->request->get('id', 'integer');
            $brand = $this->brands->get_brand($brand->id);
        }
        
         $this->design->assign('brand', $brand);
        return  $this->design->fetch('brand.tpl');
    }
}
       case 'disable':
{
foreach($ids as $id)
$this->brands->update_brand($id, array('visible'=>0));
break;
}
case 'enable':
{
foreach($ids as $id)
$this->brands->update_brand($id, array('visible'=>1));
break;
}  
Ссылка на сообщение
Поделиться на другие сайты
  • Ответов 56
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

Не ну ты посмотри на него!

Использует NULL версию симплы, и имеет наглость просить тут помощи!

По мне так нужно отправлять куда подальше вот таких.

Ссылка на сообщение
Поделиться на другие сайты

Выполнила все 4 пункта. Лампочки переключаются, но до перезагрузки страницы. После изменений в файле BrandAdmin.php при попытке открыть страницу бренда выдает ошибку

Parse error: syntax error, unexpected 'case' (T_CASE) in /home/****/****/www/admin/BrandAdmin.php on line 70 "

line 70 у меня - это    case 'disable': 

Что делать дальше, ума не приложу :( Помогите, кто может!

 

В инструкции в пункте 2 ошибка. Это пункт надо выполнять в ДРУГОМ файле, в  simpla/BrandsAdmin.php

Ссылка на сообщение
Поделиться на другие сайты

 

в шаблоне отключение видимости:

 

{if $brand->visible}вывод бренда{/if}

В каком месте шаблона нужно вставить этот код? Пробовала по всякому, после перезагрузки страницы состояние не сохраняется 

Ссылка на сообщение
Поделиться на другие сайты

В каком месте шаблона нужно вставить этот код? Пробовала по всякому, после перезагрузки страницы состояние не сохраняется

Вставлять в зависимости от шаблона, от его содержимого и от своих целей.

 

В предложенном решении есть ошибка, из-за чего "лампочка" у него выполняет роль чисто декоративную, смена состояния при клике реально не производится.

 

Пробуйте в simpla/ajax/update_object.php заменить

    case 'brands':

на

    case 'brand':

 

 

 

Ссылка на сообщение
Поделиться на другие сайты

Вставлять в зависимости от шаблона, от его содержимого и от своих целей.

 

В предложенном решении есть ошибка, из-за чего "лампочка" у него выполняет роль чисто декоративную, смена состояния при клике реально не производится.

 

Пробуйте в simpla/ajax/update_object.php заменить

    case 'brands':

на

    case 'brand':

 

 

 

Заменила. Результат тот же :( Видимо, эта публикация действительно недоработана. Жаль, функция удобная. Непонятно, почему она не реализована по умолчанию

Ссылка на сообщение
Поделиться на другие сайты

 

Заменила. Результат тот же :( Видимо, эта публикация действительно недоработана. Жаль, функция удобная. Непонятно, почему она не реализована по умолчанию

Поясните чем это удобно? Отключать бренд чтобы не выводить товары этого бренда, или для чего?

Ссылка на сообщение
Поделиться на другие сайты

Поясните чем это удобно? Отключать бренд чтобы не выводить товары этого бренда, или для чего?

Чтобы не отображать пустые бренды, когда в них заканчивается товар. Приходится их временно удалять в админке, а потом (при появлении товара) снова добавлять

Ссылка на сообщение
Поделиться на другие сайты

Чтобы не отображать пустые бренды, когда в них заканчивается товар. Приходится их временно удалять в админке, а потом (при появлении товара) снова добавлять

Это давно уже исправлено в симпле.

Какая у вас версия?

Ссылка на сообщение
Поделиться на другие сайты
  • 6 месяцев спустя...

Это давно уже исправлено в симпле.

Какая у вас версия?

 

Подскажите пожалуйста, как исправить в старых версиях данную проблему с брендами? Чтобы не отображать пустые бренды с отсутствующими товарами.

Ссылка на сообщение
Поделиться на другие сайты

Подскажите пожалуйста, как исправить в старых версиях данную проблему с брендами? Чтобы не отображать пустые бренды с отсутствующими товарами.

А у вас какая версия симплы?
Ссылка на сообщение
Поделиться на другие сайты

Покажите содержимое функции get_brands в api/Brands.php.

 

	public function get_brands($filter = array())
	{
		$brands = array();
		$category_id_filter = '';
		if(!empty($filter['category_id']))
			$category_id_filter = $this->db->placehold('LEFT JOIN __products p ON p.brand_id=b.id LEFT JOIN __products_categories pc ON p.id = pc.product_id WHERE pc.category_id in(?@)', (array)$filter['category_id']);

        $order = 'b.name';
        if(!empty($filter['sort']))
        switch ($filter['sort'])
        {
         case 'position':
         $order = 'b.position';
         break;
         case 'name':
         $order = 'b.name';
         break;
         case 'image':
         $order = 'b.image';
         break;
        }

		// Выбираем все бренды
		$query = $this->db->placehold("SELECT DISTINCT b.id, b.name, b.url, b.meta_title, b.meta_keywords, b.meta_description, b.description, b.meta_canonical, b.image, b.visible, b.position
								 		FROM __brands b $category_id_filter ORDER BY $order");
		$this->db->query($query);

		return $this->db->results();
	}
Ссылка на сообщение
Поделиться на другие сайты
Noxter

 

Сделал всё по вашей инструкции, работает. А подскажите пожалуйста, какой добавить доп. фильтр по полю visible? Не получилось.

Ссылка на сообщение
Поделиться на другие сайты

Noxter

 

Сделал всё по вашей инструкции, работает. А подскажите пожалуйста, какой добавить доп. фильтр по полю visible? Не получилось.

Чуть позже сделаю и выложу инструкцию.
Ссылка на сообщение
Поделиться на другие сайты

Файл api/Brands.php, заменить функцию get_brands на эту:

public function get_brands($filter = array())
{
	$category_id_filter = '';
	$visible_filter = '';
	$active_filter = '';
	$in_stock_filter = '';

	if(isset($filter['in_stock']))
		$in_stock_filter = $this->db->placehold('AND (SELECT count(*)>0 FROM __variants pv WHERE pv.product_id=p.id AND pv.price>0 AND (pv.stock IS NULL OR pv.stock>0) LIMIT 1) = ?', intval($filter['in_stock']));

	if(isset($filter['visible']))
		$visible_filter = $this->db->placehold('AND p.visible=?', intval($filter['visible']));
		
	if(!empty($filter['category_id']))
		$category_id_filter = $this->db->placehold("LEFT JOIN __products p ON p.brand_id=b.id LEFT JOIN __products_categories pc ON p.id = pc.product_id WHERE pc.category_id in(?@) $visible_filter $in_stock_filter", (array)$filter['category_id']);

	if(isset($filter['active']))
		$active_filter = $this->db->placehold('AND visible = ?', intval($filter['active']));
		
	// Выбираем все бренды
	$query = $this->db->placehold("SELECT DISTINCT b.id, b.name, b.url, b.meta_title, b.meta_keywords, b.meta_description, b.description, b.image
										FROM __brands b $category_id_filter
										WHERE
										1
										$in_stock_filter
										$visible_filter
										$active_filter
                                                                                ORDER BY b.name");
	$this->db->query($query);

	return $this->db->results();
}


Файл view/ProductsView.php меняем выборку брендов на эту:

// Выбираем бренды, они нужны нам в шаблоне
if(!empty($category))
{
	$brands = $this->brands->get_brands(array('category_id'=>$category->children, 'visible'=>true, 'active'=>true));
	$category->brands = $brands;
}

Пробуйте.

Изменено пользователем Noxter
Ссылка на сообщение
Поделиться на другие сайты

 

Файл api/Brands.php, заменить функцию get_brands на эту:

public function get_brands($filter = array())
{
	$category_id_filter = '';
	$visible_filter = '';
	$active_filter = '';
	$in_stock_filter = '';

	if(isset($filter['in_stock']))
		$in_stock_filter = $this->db->placehold('AND (SELECT count(*)>0 FROM __variants pv WHERE pv.product_id=p.id AND pv.price>0 AND (pv.stock IS NULL OR pv.stock>0) LIMIT 1) = ?', intval($filter['in_stock']));

	if(isset($filter['visible']))
		$visible_filter = $this->db->placehold('AND p.visible=?', intval($filter['visible']));
		
	if(!empty($filter['category_id']))
		$category_id_filter = $this->db->placehold("LEFT JOIN __products p ON p.brand_id=b.id LEFT JOIN __products_categories pc ON p.id = pc.product_id WHERE pc.category_id in(?@) $visible_filter $in_stock_filter", (array)$filter['category_id']);

	if(isset($filter['active']))
		$active_filter = $this->db->placehold('AND visible = ?', intval($filter['active']));
		
	// Выбираем все бренды
	$query = $this->db->placehold("SELECT DISTINCT b.id, b.name, b.url, b.meta_title, b.meta_keywords, b.meta_description, b.description, b.image
								 		WHERE
										1
										$in_stock_filter
										$visible_filter
										$active_filter
										FROM __brands b $category_id_filter ORDER BY b.name");
	$this->db->query($query);

	return $this->db->results();
}[/code]

Файл [b]view/ProductsView.php[/b] меняем выборку брендов на эту:
[code=auto:0]
// Выбираем бренды, они нужны нам в шаблоне
if(!empty($category))
{
	$brands = $this->brands->get_brands(array('category_id'=>$category->children, 'visible'=>true, 'active'=>true));
	$category->brands = $brands;
}
Пробуйте.

 

Запрос явно ошибочный, так как в нем сначала  поставлено WHERE, а лишь затем FROМ. Раньше такие ошибки делали начинающие, а теперь, видимо, дошла очередь до специалистов с 8-летним стажем в Simpla.

Ссылка на сообщение
Поделиться на другие сайты

Запрос явно ошибочный, так как в нем сначала  поставлено WHERE, а лишь затем FROМ. Раньше такие ошибки делали начинающие, а теперь, видимо, дошла очередь до специалистов с 8-летним стажем в Simpla.

Только из-за таких дебилов как ты и не выкладывают готовые решения на форуме, ты ведь затычка во все дыры.

Ошибка не детская, а машинальная я делал на скорую руку но тебе дебилу обязательно нужно дое***** вместо того чтобы просто указать где ошибка.

P.S. Ты конченый Kors, я не знаю как тебя окружающие люди терпят.

UPD: 30.08.2017 Внёс правки.

Изменено пользователем Noxter
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...