Jump to content

Экспорт товаров с выбором категорий


Recommended Posts

Добрый день. Сегодня утром обратился клиент и попросил сделать в экспорте товаров с выбором категорий. Вот решил поделится.

 

simpla/ajax/export.php
 
 

После

		$this->db->query('SET NAMES cp1251');

 

добавить

		$category_id = $this->request->get('category_id');
		$category_children = array();
		if(!empty($category_id))
		{
			$category = $this->categories->get_category((int)$category_id);
			if (isset($category))
				$category_children = $category->children;
		}

 

 

 

заменить

foreach($this->products->get_products(array('page'=>$page, 'limit'=>$this->products_count)) as $p)

 

 на

foreach($this->products->get_products(array('page'=>$page, 'category_id'=>$category_children, 'limit'=>$this->products_count)) as $p)	

 

 

заменить

		$total_products = $this->products->count_products();
		
		if($this->products_count*$page < $total_products)
			return array('end'=>false, 'page'=>$page, 'totalpages'=>$total_products/$this->products_count);
		else
			return array('end'=>true, 'page'=>$page, 'totalpages'=>$total_products/$this->products_count);	

 на 

		$total_products = $this->products->count_products(array('category_id'=>$category_children));
		
		if($this->products_count*$page < $total_products)
			return array('end'=>false, 'page'=>$page, 'category_id'=>$category_children, 'totalpages'=>$total_products/$this->products_count);
		else
			return array('end'=>true, 'page'=>$page, 'category_id'=>$category_children, 'totalpages'=>$total_products/$this->products_count);

 

simpla/ExportAdmin.php

 

После 
 

	public function fetch()
	{

добавить 
 

		$categories = $this->categories->get_categories_tree();
		$this->design->assign('categories', $categories);

simpla/design/html/export.tpl
 

после 

$("#start").hide('fast');

добавить 

$("#product_categories").hide('fast');

или заменить на 

$("#start, #product_categories").hide('fast');

 

 

 

после 

page = typeof(page) != 'undefined' ? page : 1;

добавить

category_id = $('select[name="category_id"]').find('option:selected').val();

 

 

 

 

заменить

data: {page:page},

на 

data: {page:page, category_id:category_id},

 

 

 

 

после 

<div id='progressbar'></div>

добавить

	<div id="product_categories" {if !$categories}style='display:none;'{/if}>
		<label>Категория</label>
		<div>
			<ul>
				<li>
					<select name="category_id">
						<option value='0'>Все категории</option>
						{function name=category_select level=0}
							{foreach from=$categories item=category}
									<option value='{$category->id}'>{section name=sp loop=$level}    {/section}{$category->name|escape}</option>
									{category_select categories=$category->subcategories  level=$level+1}
							{/foreach}
						{/function}
						{category_select categories=$categories}
					</select>
				</li>	
			</ul>
		</div>
	</div>

П.С. Если нашли ошибки, пишите.
Спасибо можно говорить и в денежном эквиваленте  :)

Link to post
Share on other sites
  • Replies 81
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted Images

На версии © 2013 Simpla 2.2.3, не видит этого селекта выбора категорий. Если убрать display:none, вывод селекта происходит. Но опять же не выводятся категории товара.

 

post-3879-0-52236400-1380597762_thumb.jpg

Link to post
Share on other sites

На версии © 2013 Simpla 2.2.3, не видит этого селекта выбора категорий. Если убрать display:none, вывод селекта происходит. Но опять же не выводятся категории товара.

 

А у Вас категории есть? или Вы не поправили файл simpla/ExportAdmin.php

Link to post
Share on other sites

Класс!!! Спасибо!

Я как то недавно задавал подобный вопрос на форуме как сделать такую выгрузку, чтобы всю базу не лопатило - но озвученная одним умельцем сумма за такую доделку в 70$ меня отпугнула )))

Link to post
Share on other sites

Класс!!! Спасибо!

Я как то недавно задавал подобный вопрос на форуме как сделать такую выгрузку, чтобы всю базу не лопатило - но озвученная одним умельцем сумма за такую доделку в 70$ меня отпугнула )))

70$ наверное многовато, можете мне оплатить сколько считаете нужно в качестве стимула что то еще интересно сделать как будет настроение :)

Link to post
Share on other sites
  • 5 months later...
  • 5 months later...
  • 1 month later...

Дополнение по свойствам . После выполнения вышеуказанных действий.

 

Сделаем так чтобы добавлялись в список колонок свойства товаров только для выбранной категории

 

Для этого заменим это:

// Добавим в список колонок свойства товаров 
$features = $this->features->get_features();

На это:

		// Добавим в список колонок свойства товаров только для выбранной категории
		$filter = array();
		if(!empty($category_id))
		{
			$category = $this->categories->get_category((int)$category_id);
			if (isset($category))
				$filter['category_id'] = $category->id;
		}
		$features = $this->features->get_features($filter);

 

Link to post
Share on other sites
  • 1 month later...

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

 

У меня вопрос, если это не сложный допил, то как выстроить товары при экспорте по категории, этот момент всегда смущал когда в эксперте много категорий, все в перемешку...

Link to post
Share on other sites

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

 

У меня вопрос, если это не сложный допил, то как выстроить товары при экспорте по категории, этот момент всегда смущал когда в эксперте много категорий, все в перемешку...

Вам нужно в api/Product.php сделать в методе get_products свой ордер который будет отвечать за категории и использовать его в simpla/ajax/export.php

Link to post
Share on other sites
  • 4 months later...
  • 3 weeks later...

Как сделать, чтобы при экспорте категории, файл назывался как категория? к примеру: часы.csv или chasi.csv

Edited by keks
Link to post
Share on other sites

В simpla/ajax/export.php вместо

private $filename = 'export.csv';

напиши

$category_id = $this->request->get('category_id');
   if(!empty($category_id))
   {
       $category = $this->categories->get_category((int)$category_id);
   }
private $filename = $category->name.'.csv';

Это топорно (лишний запрос будет), но не критично.

Link to post
Share on other sites
  • 2 weeks later...

Если выбрать:


<option value='0'>Все категории</option>
то экспорт прекращает работу и ничего не формирует. Edited by Noxter
Link to post
Share on other sites
  • 3 weeks later...

А скажем если мне надо разбить товар не по категориям, а по брендам?

Могу индивидуально написать функционал за оплату.
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...