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

Как вывести список брендов с разбивкой по алфавиту.


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

Подскажите, как разбить большой список брендов по алфавиту.
Например, чтобы при нажитии на кнопку А, выводились бренды только на букву А, или на 123, только бренды, которые начинаются с цифр. Видел такое на множестве интернет-магазинов, но что-то не получилось.

И еще вопрос, как можно сделать вывод разбивки по первым буквам, например:

A
Armaini
...
B
Bosco
Bvlgari
...

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

Самый простой вариант - использовать 2 Джейквери-плагина: лист-меню и (блин, второй не помню, как называется :-) ) из той же серии...
Или заплатить немного денег тому, кто знает, как это делается...

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

я делал для Симплы 2.3.6 от 14.07.14

Brands.php

	public function get_all_brands($filter = array())
	{
		$brands = array();
		$category_id_filter = '';
		$visible_filter = '';
		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", (array)$filter['category_id']);

		// Выбираем все бренды
		$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 ORDER BY b.name");
		$this->db->query($query);

		// return $this->db->results();
		$bnds = $this->db->results();

		foreach($bnds as $brnd){
			$first_letter = mb_strtoupper(substr($brnd->name, 0, 1));
			$otp[$first_letter][] = $brnd;
		}

		return $otp;
	}

 

в шаблоне где нужно вывести (в моем случае я выводил в шаблоне page)

{get_all_brands var=all_brands}

{if $all_brands}
	{foreach $all_brands as $kbrnds => $brnds}
	<h3>{$kbrnds}</h3>
	<ul class="all_brands">
		{foreach $brnds as $b}
			<li><a href="brands/{$b->url}">{$b->name}</a></li>
		{/foreach}
	</ul>
	{/foreach}
{/if}

 

Код писал на скорую, поэтому несуразные имена переменных, и кривосли аля накой черд я узал функцию чтобы вырезать первую букву хотя можно было сделать просто '$first = $str[0];'

 

и чтобы это дело работало в View.php
 

			$this->design->smarty->registerPlugin("function", "get_all_brands",              array($this, 'get_all_brands_plugin'));

	public function get_all_brands_plugin($params, &$smarty)
	{
		if(!isset($params['visible']))
			$params['visible'] = 1;
		if(!empty($params['var']))
			$smarty->assign($params['var'], $this->brands->get_all_brands($params));
	}

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

Подниму тему — как начать вывод с A? а то в начале всякие цифры и скобки лезут...

Также русский алфАвит не работает...

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

Подниму тему — как начать вывод с A? а то в начале всякие цифры и скобки лезут...

Также русский алфАвит не работает...

 

а у вас есть цыфры в названиях?

 

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

		foreach($bnds as $brnd){
			$first_letter = mb_strtoupper(substr($brnd->name, 0, 1));
			$otp[$first_letter][] = $brnd;
		}
Ссылка на сообщение
Поделиться на другие сайты

 

а у вас есть цыфры в названиях?

 

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

		foreach($bnds as $brnd){
			$first_letter = mb_strtoupper(substr($brnd->name, 0, 1));
			$otp[$first_letter][] = $brnd;
		}

 

Почему Вы решили, что там должны сохраняться непременно первые буквы?  С ходу видно, что  в коде используется substr...

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

Почему Вы решили, что там должны сохраняться непременно первые буквы?  С ходу видно, что  в коде используется substr...

 

видимо потому что substr с параметром 0,1.

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

видимо потому что substr с параметром 0,1.

А как насчет того, чтобы догадаться, что с русскими буквами это может давать ошибку? На нее довольно явно  указал maksclub. Тем более рядом в коде стоит подсказка mb_strtoupper...

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

Попробуйте mb_substr

 

...........

Или даже так

$first_letter = mb_strtoupper(preg_replace('/^([^\w]*)([\w]{1}).*$/ui', '$2', $brnd->name));

Это разрешит только буквы и цифры

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

 

а у вас есть цыфры в названиях?

 

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

		

 

Есть названия брендов, начинающиесяс цифр (со скобкой не правильно назвал), но нужно с А и чтобы русские буквы работали... эт оважно, так функционал брендов задействован в качестве автора, т оесть их очень много

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

У меня есть рабочий вариант, но в нем сначала идут цифры, потом английский алфавит, а потом русский

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

У меня есть рабочий вариант, но в нем сначала идут цифры, потом английский алфавит, а потом русский

Если не сложно, поделитесь..

Я тоже такую страничку хочу вывести.

Ссылка на сообщение
Поделиться на другие сайты
  • 3 года спустя...
В 04.05.2018 в 15:56, madison21 сказал:

Если не сложно, поделитесь..

Я тоже такую страничку хочу вывести.

https://ericsteinborn.com/jquery-listnav/

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

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

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

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

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

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

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

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

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

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