Новости Joomla

Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях

Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях

👩‍💻 Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях. На старте его сайт на Joomla 3 вообще не смог обновиться на Joomla 5. Пришлось делать экспорт/импорт материалов. Проделав всё это он запустил-таки этот объём данных на Joomla 5. Тестовый скрипт грузил 200 материалов из этого объёма всего за 94 секунды ))) А главная страница с категориями грузилась 20 секунд. Добавив индекс для таблицы #__content

CREATE INDEX idx_catid_state ON #__content (catid, state);
он сократил время загрузки категорий до 1 секунды. Затем наш герой решил поковырять SQL-запрос в ArticleModel, который отвечает за выборку материалов. И решил заменить тип JOIN на STRAIGHT_JOIN для категорий.
// ->from($db->quoteName('#__content', 'a'))->from(    $db->quoteName('#__content', 'a')    . ' STRAIGHT_JOIN ' . $db->quoteName('#__categories', 'c')    . ' ON ' . $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid'))// ->join('LEFT', $db->quoteName('#__categories', 'c'), $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid'))
Что сократило загрузку 200 материалов из 150к с 94 секунд до 5. К слову сказать, боевой сайт на Joomla 3 крутится на 12CPU 64GB рамы. А все манипуляции с кодом он делает на базовом 1CPU 1GB сервере и замеры скорости даны именно для базового сервера. Но это всё в дискуссии, хотя в идеале должно вылиться в Pull Requests. Мы - Open Source сообщество, где никто никому ничего не должен. Джунгли. Но человек ищет пути оптимизации Joomla и предлагает решения. Если оказать поддержку и предложить помощь хотя бы с тестированием самых разнообразных сценариев, то возможно эти улучшения смогут войти в ядро. Пусть не быстро, пусть через несколько лет, пусть не все, но войдут. Достаточно предложить руку помощи и приложить немного усилий.
Дискуссию на GitHub можно почитать здесь.@joomlafeed#joomla #community #php

Перевод и публикация интервью с Joomla евангелистом на греческом портале Joomla

Перевод и публикация интервью на греческом портале Joomla 🇬🇷

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

Недавно я взял интервью у Билла (Василиса) Коциаса - руководителя студии, читающего лекции в университете и популяризатора Joomla в Греции. Это интервью из журнала NorrNext, в оригинале на английском, теперь доступно на греческом языке и опубликовано на портале joomla.gr. 🎉

До чего же приятно… 😇😊 Работа замечена и с ней посчитали необходимым ознакомить аудиторию страны, в которой Билл читает лекции. И это солнечная Греция - страна, страна, с которой Россию многое связывает. 🇬🇷🇷🇺🕊

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

Из него вы узнаете, что в Греции доля Joomla среди CMS занимает порядка 30-40%. По моему мнению это - самый высокий показатель во всем мире. Также чтение лекций о Joomla в университетах позволит привести новых пользователей и к тому же молодое поколение. Ну и огромное кол-во сертификтатов Билла на стене (смотрим фото в статье) свидетельствует о том, что Joomla может применяться как профессиональный инструмент.

🌐 Оригинальное интервью (на английском)
🇬🇷 Интервью на греческом портале (joomla.gr)

Что насчет перевода на русский? Увы, времени всего 24 часа в сутках. Я продолжаю готовить новые интервью. Возможно, после завершения выпуска журнала, рассмотрю перевод некоторых интервью на русский. Но я об этом не говорил. 😊 В блоге @eugenius_blog публикую анонсы интересных событий из мира Joomla, интервью, уроки и полезные советы, а также делюсь мыслями:, связанными с разработкой и веб-дизайном.

0 Пользователей и 1 Гость просматривают эту тему.
  • 273 Ответов
  • 98335 Просмотров
*

Nikita Web

  • Захожу иногда
  • 62
  • 1 / 1
у меня заработала... только не получается вывести названия под-категорий на верх страницы... а так все ок

virtuemart 1.1.7
*

Московский курьер

  • Новичок
  • 7
  • 0 / 0
На VirtueMart 1.1.8  не заработало
Цитата: tsesl от 30.10.2008, 13:28:12

Часть IIб "Отображение товаров из подкатегорий произвольной вложенности (для ветки VM1.1.x)"
*

Московский курьер

  • Новичок
  • 7
  • 0 / 0
Прошу прошения заработало  :D
*

god-master

  • Захожу иногда
  • 61
  • 2 / 0
А вот вопрос: я сделал как написано на первой странице, и что получилось...
Выводятся товары из дочерних категорий в родительской, но сортировка, которая имеется в родительской для них не выполняется. Они автоматом сортируются по своей категории.

Как сделать, чтобы для дочерних товаров тоже работала сортировка из родительской категории.

Попробовал в файле /administrator/components/com_virtuemart/html/shop_browse_queries.php закомментировать строчки
Код
// Filter Products by Category
$where_clause[] = "`#__{vm}_product_category_xref`.`product_id`=`#__{vm}_product`.`product_id`";
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=`#__{vm}_category`.`category_id`";
Тогда всё пошло, но вот косяк - при просмотре полного описания товара у него неправильно определяется категория.

Версия VM - 1.015. Помогите, пожалуйста!
*

Московский курьер

  • Новичок
  • 7
  • 0 / 0
Доброго времени суток! НУЖНА ПОМОЩЬ
Не могу найти решение нужно вывести все товары из всех категорий в СЛУЧАЙНОМ порядке на главной  странице магазина под списком родительских категорий (вложенность 2 уровня)
Данное решение:
Часть IIб "Отображение товаров из подкатегорий произвольной вложенности (для ветки VM1.1.x)"
ПОМОГЛО,но частично выводится товар в под категориях а нужно чтоб и под родительскими категориями тоже выводился.
*

afon9l

  • Захожу иногда
  • 112
  • 1 / 21
Супер !

Только как теперь убрать вот это все:


У меня и вверху и внизу списка дублируется это меню, а показать 5,10,20,50 и вовсе не работает.
Действовал по третьему методу, vm последний.

Хотелось бы знаете как? Оставить меню 5,10,20 ... если удастся поченить - вверху, а странички "1,2,3 следущая" - внизу.
« Последнее редактирование: 18.08.2011, 12:11:38 от afon9l »
*

AlterEgo

  • Захожу иногда
  • 170
  • 71 / 5
afon9l, нужно изменить файлы: browse_orderbyform.tpl.php, который отвечает за вывод пагинации вверху, и, browse_pagenav.tpl.php, отвечающий за вывод постраничной навигации внизу.
Они располагаются в .../components/com_virtuemart/themes/default/templates/browse/includes/.
В файле browse_orderbyform.tpl.php закомментировать (удалить) сл. код в стр.43-50
Код
<!-- PAGE NAVIGATION AT THE TOP -->
    <br/>
    <div style="text-align:center;"><?php
    $pagenav->writePagesLinks( $search_string );
    echo '<br />';
    $pagenav->writePagesCounter();
      ?>
    </div>
В файле browse_pagenav.tpl.php закомментировать (удалить) сл. код в стр.7-16
Код
	<?php 
if( $show_limitbox ) { ?>
<br/><br/>
<form action="<?php echo $search_string ?>" method="post">
<?php echo $VM_LANG->_('PN_DISPLAY_NR')?>&nbsp;&nbsp;
<?php $pagenav->writeLimitBox( $search_string ); ?>

<noscript><input class="button" type="submit" value="<?php echo $VM_LANG->_('PHPSHOP_SUBMIT')?>" /></noscript>

</form>
Фильтрация количества отображаемых товаров может не работать из-за неправильно настроенного sef-компонента. У меня такое было.
*

AlterEgo

  • Захожу иногда
  • 170
  • 71 / 5
Да, и ещё. Тут кто-то уже писал о том, что данный хак некорректно работает, если для товаров в каталоге назначается сразу несколько категорий. Т.е. если мы выводим несколько дочерних категорий, в которых содержатся одинаковые товары, то каждый такой товар будет выводится только раз в категории, которая идет первой. В остальных его не будет. Как вариант, чтобы это исправить, нужно изменить sql-запрос к БД в файле shop_browse_queries.php.
Код:
Код
$count_name = "COUNT(DISTINCT `#__{vm}_product`.`product_sku`) as num_rows";
Заменить соответственно на следующий. Можно сделать условие проверки:
Код
if(!empty( $category_childs )){
$count_name = "COUNT(ALL `#__{vm}_product`.`product_sku`) as num_rows";
}else{
$count_name = "COUNT(DISTINCT `#__{vm}_product`.`product_sku`) as num_rows";
}
Код:
Код
$list  = "SELECT DISTINCT $fieldnames FROM ($table_names) ";
Заменить на:
Код
if(!empty( $category_childs )){
$list  = "SELECT ALL $fieldnames FROM ($table_names) ";
}else{
$list  = "SELECT DISTINCT $fieldnames FROM ($table_names) ";
}
Код:
Код
$q .= "\n GROUP BY `#__{vm}_product`.`product_sku` ";
Заменить на:
Код
if(empty( $category_childs )){
$q .= "\n GROUP BY `#__{vm}_product`.`product_sku` ";
}
Недостаток - товары в пределах категорий не будут рассортированы.
*

afon9l

  • Захожу иногда
  • 112
  • 1 / 21
Большое спасибо !

После удаления того что вы сказали browse_orderbyform.tpl.php все вроде заработало как надо,
После удаления в browse_pagenav.tpl.php стало перекидывать на ошибку в коде.

Parse error: syntax error, unexpected '}' in /home/a/afon9l/public_html/components/com_virtuemart/themes/default/templates/browse/includes/browse_pagenav.tpl.php on line 9

Убрал скобку '}' заработало !

Да у меня стоит sf404sef, какую настройку поменять помните ?
« Последнее редактирование: 18.08.2011, 23:17:10 от afon9l »
*

AlterEgo

  • Захожу иногда
  • 170
  • 71 / 5
Надо чуток побольше убрать, скобка осталась, из-за неё ошибка появляется.
В файле browse_pagenav.tpl.php закомментировать (удалить) сл. код в стр.7-18
Код
	<?php 
if( $show_limitbox ) { ?>
<br/><br/>
<form action="<?php echo $search_string ?>" method="post">
<?php echo $VM_LANG->_('PN_DISPLAY_NR')?>&nbsp;&nbsp;
<?php $pagenav->writeLimitBox( $search_string ); ?>

<noscript><input class="button" type="submit" value="<?php echo $VM_LANG->_('PHPSHOP_SUBMIT')?>" /></noscript>

</form>
<?php
} ?>
Насчет SEF здесь можно глянуть:http://joomlaforum.ru/index.php?topic=77498.0 . Вроде там решали проблему.
*

mondee

  • Осваиваюсь на форуме
  • 15
  • 1 / 0
Проблема такая:
Как вывести на одной странице категории все товары из подкатегорий таблицами, если в каждой подкатегории своя таблица (т.е. browse_listtable имеет условие if для каждой подкатегории) пример части этого файла

Код
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
mm_showMyFileName(__FILE__); ?>

<?php echo $browsepage_header // The heading, the category description ?>
<?php echo $parameter_form // The Parameter search form ?>
<?php echo $orderby_form // The sort-by, order-by form PLUS top page navigation ?>


<?php

$data =array(); // Holds the rows of products
$i = 1; $row = 0; // Counters

// Table header


if ($category_id == 10 || $category_id == 1 || $category_id == 9 ) {

// Table header
$tableheader[] = '<center>'.$VM_LANG->_('PHPSHOP_CART_NAME').'</center>';
$tableheader[] = '<center>'.$VM_LANG->_('PHPSHOP_CART_SKU').'</center>';
$tableheader[] = '<center>'.$VM_LANG->_('IGROK_VES').'</center>';
$tableheader[] = '<center>'.$VM_LANG->_('IGROK_AMPLUA').'</center>';

// Creates a new HTML_Table object that will help us
// to build a table holding all the products
$table =& new HTML_Table('width="100%"');

$table->addRow( $tableheader, 'class="sectiontableheader"', 'th', true );

    foreach( $products as $product ) {

foreach( $product as $attr => $val ) {
// Using this we make all the variables available in the template
// translated example: $this->set( 'product_name', $product_name );
$this->set( $attr, $val );
}

$data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'.$product['product_name'].'</a>';
$data[$row][] = '<center>'.$product['product_sku'].'</center>';
$data[$row][] = '<center>'.$product['product_ves'].'</center>';
$data[$row][] = '<center>'.$product['product_amplua'].'</center>';

$row++;
    }
}

elseif ($category_id == 8 ) {

// Table header
$tableheader[] = '<center>'.$VM_LANG->_('PHPSHOP_CART_NAME').'</center>';
$tableheader[] = '<center>'.$VM_LANG->_('PHPSHOP_CART_SKU').'</center>';
$tableheader[] = '<center>'.$VM_LANG->_('IGROK_VES').'</center>';


// Creates a new HTML_Table object that will help us
// to build a table holding all the products
$table =& new HTML_Table('width="100%"');

$table->addRow( $tableheader, 'class="sectiontableheader"', 'th', true );

    foreach( $products as $product ) {

foreach( $product as $attr => $val ) {
// Using this we make all the variables available in the template
// translated example: $this->set( 'product_name', $product_name );
$this->set( $attr, $val );
}

$data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'.$product['product_name'].'</a>';
$data[$row][] = '<center>'.$product['product_sku'].'</center>';
$data[$row][] = '<center>'.$product['product_ves'].'</center>';


$row++;
    }
}

else  {

// Table header
$tableheader[] = '<center>'.$VM_LANG->_('PHPSHOP_CART_NAME').'</center>';
$tableheader[] = '<center>'.$VM_LANG->_('PHPSHOP_CART_SKU').'</center>';

// Creates a new HTML_Table object that will help us
// to build a table holding all the products
$table =& new HTML_Table('width="100%"');

$table->addRow( $tableheader, 'class="sectiontableheader"', 'th', true );

    foreach( $products as $product ) {

foreach( $product as $attr => $val ) {
// Using this we make all the variables available in the template
// translated example: $this->set( 'product_name', $product_name );
$this->set( $attr, $val );
}

$data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'.$product['product_name'].'</a>';
$data[$row][] = '<center>'.$product['product_sku'].'</center>';

$row++;
    }
}


// Loop through each row and build the table
foreach($data as $key => $value) {

$table->addRow( $data[$key], 'class="sectiontableentry'.$i.'"', 'td', true );
$i = $i == 1 ? 2 : 1;
}
// Display the table
echo $table->toHtml();

?>

<br class="clr" /><br />
<?php echo $browsepage_footer ?>
<?php
// Show Featured Products
if( $this->get_cfg( 'showFeatured', 1 )) {
    /* featuredproducts(random, no_of_products,category_based) no_of_products 0 = all else numeric amount
    edit featuredproduct.tpl.php to edit layout */
    echo $ps_product->featuredProducts(true,10,true);
} ?>
<?php echo $recent_products ?>

В каждой подкатегории все выводится нормально, но вот как это вывести на одну страницу к главной категории?
*

afon9l

  • Захожу иногда
  • 112
  • 1 / 21
А как сделать чтобы только подкатегории с текстом и фото (из меню вирта) выводились ?
нашел ответ тут: http://slaffko.name/blog/item/oshibka-v-virtuemart-119-v-dannoj-kategorii-net-tovarov.html?category_id=25

Осталось теперь узнать как поменять местами описание и категории. Сейчас у меня снизу описание, а сверху категории.
А еще лучше чтобы текст потом подкатегории и потом еще текст.

Решил частично. Только как местами поменять.
« Последнее редактирование: 31.08.2011, 17:54:29 от afon9l »
*

liliya1919

  • Захожу иногда
  • 87
  • 0 / 0
Здравствуйте.
Ребят,подскажите как сделать так, чтобы товары показывались сразу.
Т.е. ,допустим, на сайте 4 пункта меню: Главная Портфолио Контакты Магазин. Так вот при нажатии на Магазин открывается VM. Его стандартный вывод такой:
Категория 1
Категория 2
Категория 3


После выбора категории происходит:
Категория 1
 товар 1
 товар 2
 товар 3
Категория 2
Категория 3



Как сделать такое отображение сразу же при нажатии кнопки "магазин"

Категория 1
 Товар 1 ____ цена___ кол-во___ купить
 Товар 2 ____ цена___ кол-во___ купить
 Товар 3 ____ цена___ кол-во___ купить
Категория 2
 Товар 1 ____ цена___ кол-во___ купить
 Товар 2 ____ цена___ кол-во___ купить
 Товар 3 ____ цена___ кол-во___ купить
Категория 3
 Товар 1 ____ цена___ кол-во___ купить
 Товар 2 ____ цена___ кол-во___ купить
 Товар 3 ____ цена___ кол-во___ купить


Очень надо помогите плиииз(((

Перепробовала все что написанно в этой теме. файл shop.browse.php не дает никаких изменений.
shop_browse_queries.php этого файла у меня вообще не было , пришлось отдельно скачать и вставить с изменениями. Ничего опять же не дало(((
Версия VM 1.1.3

Помогите пожалуйста. Неделю уже голову ломаю((

После всех этих изменений вот такие ошибки выползли:
Warning: getimagesize() [function.getimagesize]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /var/www/u1892990/public_html/formemory.me/administrator/components/com_virtuemart/html/shop.browse.php on line 396

Warning: getimagesize() [function.getimagesize]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /var/www/u1892990/public_html/formemory.me/administrator/components/com_virtuemart/html/shop.browse.php on line 396

Warning: getimagesize() [function.getimagesize]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /var/www/u1892990/public_html/formemory.me/administrator/components/com_virtuemart/html/shop.browse.php on line 396

Warning: getimagesize() [function.getimagesize]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /var/www/u1892990/public_html/formemory.me/administrator/components/com_virtuemart/html/shop.browse.php on line 396
« Последнее редактирование: 02.10.2011, 14:18:17 от liliya1919 »
*

motor1

  • Осваиваюсь на форуме
  • 38
  • 4 / 0
спасибо решил проблемку
*

Addsystem

  • Новичок
  • 2
  • 0 / 0
А как сделать, чтобы при нажатии на родительскую категорию просто открывалась первая подкатегория?
что то не нашел тут. !

версия VirtueMart 1.1.3
*

Sergey82

  • Новичок
  • 6
  • 0 / 0
Спасибо за решение этого вопроса.
*

ИринаМ

  • Осваиваюсь на форуме
  • 45
  • 0 / 0


[spoiler title=Часть I "Вывод развернутого дерева категорий в модуле (для ветки VM1.0.x)"]

В файле /administrator/components/com_virtuemart/classes/ps_product_category.php ищем функцию get_category_tree. В ней ищем $allowed = false;. Ниже идет:


	
	
	
if( 
$depth_list[$n] > ) {
	
	
	
	
// Subcategory!
	
	
	
	
if( isset( 
$root ) && in_array$category_tmp[$row_list[$n]]["category_child_id"], $allowed_subcategories )
	
	
	
	
|| 
$category_tmp[$row_list[$n]]["category_parent_id"] == $category_id
	
	
	
	
|| 
$category_tmp[$row_list[$n]]["category_parent_id"] == @$categories[$category_id]["category_parent_id"]) {
	
	
	
	
	
$allowed true;

	
	
	
	
}
	
	
	
}


добавляем $allowed = true; после закрывающей скобки вложенного if, т.е. должно получиться:


	
	
	
if( 
$depth_list[$n] > ) {
	
	
	
	
// Subcategory!
	
	
	
	
if( isset( 
$root ) && in_array$category_tmp[$row_list[$n]]["category_child_id"], $allowed_subcategories )
	
	
	
	
|| 
$category_tmp[$row_list[$n]]["category_parent_id"] == $category_id
	
	
	
	
|| 
$category_tmp[$row_list[$n]]["category_parent_id"] == @$categories[$category_id]["category_parent_id"]) {
	
	
	
	
	
$allowed true;

	
	
	
	
}
	
	
	
	
$allowed true//наша добавленная строка
	
	
	
}


Сохраняем, проверяем...

Всем удачи!
[/quote]
подскажите пожалуйста как сделать что бы подкатегории выводились только после нажатия на категории?
*

ИринаМ

  • Осваиваюсь на форуме
  • 45
  • 0 / 0
подскажите пожалуйста как сделать что бы подкатегории выводились только после нажатия на категории?
*

ИринаМ

  • Осваиваюсь на форуме
  • 45
  • 0 / 0
есть каталог: Изделия для записи
                     _ Ежедневники
                        _Недатированые
                        _Датированиы
                    Брелоки
                      _металлические
                      _пластиковые
Как сделать так что бы при нажатии на "Изделия для записи" раскрывались все подкатегории (Ежедневни, Недатированые, Датированиы). только этой категории!При этом в категории "Брелоки" не раскрываются подкатегории. А если нажать на "Брелоки" то раскоются все подкатегории.Помогите пожалуйста решить проблему!!
j-1.5.17, VM-1.1.5 stable
*

ИринаМ

  • Осваиваюсь на форуме
  • 45
  • 0 / 0
Или что бы отображалось вот так:http://www.happygifts.ru/catalog/razdel.php?SECTION_ID=75
*

denn70

  • Захожу иногда
  • 110
  • 2 / 0
А возможно сделать, чтобы товары из категории выводились под названием самой категории? Т.е вида
Категория 1
 товар 1
 товар 2
 товар 3
Категория 2
Категория 3

В этой теме несколько раз спрашивалось, но пока ответа нет.
*

kolyok333

  • Новичок
  • 9
  • 0 / 0
Спасибо за решение, единственная проблема, при переходе по страницам с товарами (если более 20 товаров внизу появляются страницы речь про них) на разных страницах одинаковое описание Title и Дескрипшин. Понимаю что это скорее вина не разработчика а Vertuemart, но может подскажете как исправить, а то насколько я понимаю Google не особо любит такие вещи.

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

Код
function getCatergoryChildsList( $clist, $catid ){
$res_list = array( $catid );
$search_childs = true;
while( $search_childs ){
$search_childs = false;
foreach( $clist as $c_catid => $val ){
if( in_array( $val['category_parent_id'], $res_list ) ){
$res_list[] = $c_catid;
unset( $clist[ $c_catid ] );
$search_childs = true;
}
}
}
return $res_list;
}
$category_childs = '';
if ( $category_id && $ps_product_category->has_childs($category_id) ){
$category_childs = getCatergoryChildsList( $ps_product_category->getCategoryTreeArray(), $category_id );
}
*

mayson_ml

  • Захожу иногда
  • 60
  • 0 / 0
*решение дано в ознакомительных целях для задания направления мышлению. Навешивание рюшечек и оптимизацию делайте сами своими умами 8)

[spoiler title=Часть I "Вывод развернутого дерева категорий в модуле (для ветки VM1.0.x)"]
Часть 1 и 2а не работают, точнее ни чего не меняется VR 1.1.9
как можно по другому вывести подкатегории?

В файле /administrator/components/com_virtuemart/classes/ps_product_category.php ищем функцию get_category_tree. В ней ищем $allowed = false;. Ниже идет:


	
	
	
if( 
$depth_list[$n] > ) {
	
	
	
	
// Subcategory!
	
	
	
	
if( isset( 
$root ) && in_array$category_tmp[$row_list[$n]]["category_child_id"], $allowed_subcategories )
	
	
	
	
|| 
$category_tmp[$row_list[$n]]["category_parent_id"] == $category_id
	
	
	
	
|| 
$category_tmp[$row_list[$n]]["category_parent_id"] == @$categories[$category_id]["category_parent_id"]) {
	
	
	
	
	
$allowed true;

	
	
	
	
}
	
	
	
}


добавляем $allowed = true; после закрывающей скобки вложенного if, т.е. должно получиться:


	
	
	
if( 
$depth_list[$n] > ) {
	
	
	
	
// Subcategory!
	
	
	
	
if( isset( 
$root ) && in_array$category_tmp[$row_list[$n]]["category_child_id"], $allowed_subcategories )
	
	
	
	
|| 
$category_tmp[$row_list[$n]]["category_parent_id"] == $category_id
	
	
	
	
|| 
$category_tmp[$row_list[$n]]["category_parent_id"] == @$categories[$category_id]["category_parent_id"]) {
	
	
	
	
	
$allowed true;

	
	
	
	
}
	
	
	
	
$allowed true//наша добавленная строка
	
	
	
}


Сохраняем, проверяем...
[/spoiler]

[spoiler title=Часть IIа "Отображение товаров из подкатегорий (для ветки VM1.0.x)"]
В файле /administrator/components/com_virtuemart/html/shop.browse.php ищем строку // NEW: Include the query section from an external file. Сразу над ней добавляем:


function getCategories($catid=0){
	
$cats getCategoriesTree($catid);
	
$tmp = array();
	
foreach(
$cats as $curcat) {$tmp[]=$curcat->id;}
	
return 
$tmp;
}

function 
getCategoriesTree($catid=0){
	
global 
$database;
	
$database->setQuery"SELECT c.category_child_id as id,c.category_parent_id as parent FROM #__vm_category_xref as c "
	
"\nWHERE c.category_parent_id=".$catid);
	
$cats $database->loadObjectList();
	
$tmp=array();
	
if (
count($cats)>0) {
	
	
foreach (
$cats as $cat$tmp=array_merge($tmp,getCategoriesTree($cat->id));
	
}
	
$cats=array_merge($cats,$tmp);
	
return 
$cats;
}

$rows implode(',',getCategories($category_id));
if (
$category_id){
	
if (
$rows$category_id1 $category_id.','.$rows;
	
else 
$category_id1 '';
}


Далее открываем /administrator/components/com_virtuemart/html/shop_browse_queries.php, находим код:


if( $category_id ) {
	
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id;
}


меняем его на наше слегка модифицированное:


if( $category_id ) {
	
if (
$category_id1$where_clause[] = "`#__{vm}_product_category_xref`.`category_id` IN(".$category_id1.")";
	
else 
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id;
}


Сохраняем, проверяем...
[/spoiler]

[spoiler title=Часть IIб "Отображение товаров из подкатегорий произвольной вложенности (для ветки VM1.1.x)"]
В файле /administrator/components/com_virtuemart/html/shop.browse.php ищем строку $dbp = new ps_DB;
Под ней добавляем:


function getCatergoryChildsList$clist$catid ){
	
$res_list = array( $catid );
	
$search_childs true;
	
while( 
$search_childs ){
	
	
$search_childs false;
	
	
foreach( 
$clist as $c_catid => $val ){
	
	
	
if( 
in_array$val['category_parent_id'], $res_list ) ){
	
	
	
	
$res_list[] = $c_catid;
	
	
	
	
unset( 
$clist$c_catid ] );
	
	
	
	
$search_childs true;
	
	
	
}
	
	
}
	
}
	
return 
$res_list;
}
$category_childs '';
if ( 
$category_id && $ps_product_category->has_childs($category_id) ){
	
$category_childs getCatergoryChildsList$ps_product_category->getCategoryTreeArray(), $category_id );
}


Далее открываем /administrator/components/com_virtuemart/html/shop_browse_queries.php, находим код:


	
} elseif( empty( 
$keyword ) && empty( $manufacturer_id )) {
	
	
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id;
	
}


меняем на немного подправленный нами:


	
} elseif( empty( 
$keyword ) && empty( $manufacturer_id )) {
	
	
if(!empty( 
$category_childs ))
	
	
	
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id` IN (".$category_id.",".implode(',',$category_childs).")";
	
	
else
	
	
	
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id;
	
}


Сохраняем, проверяем...
[/spoiler]

Всем удачи!
часть 1 и 2а не работают, точнее ни чего не изменяется, как можно по другому вывести подкатегории? VR 1.1.9
« Последнее редактирование: 02.01.2012, 21:19:02 от mayson_ml »
*

mayson_ml

  • Захожу иногда
  • 60
  • 0 / 0
beagler на счет "!" знака, он убрал надпись "товары отсутствуют", но подкатегории не выводит, что мне по сути и требуется...
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
для вирта 1.1.9
shop_browse_queries.php 66 строка
Код
$where_clause[] = "`#__{vm}_product_category_xref`.`product_id`=`#__{vm}_product`.`product_id`";
заменить на
Код
$childs = $ps_product_category->get_child_list($category_id);
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id` IN (".$category_id.",".implode(',',$childs).")";
Не проверял.
*

mayson_ml

  • Захожу иногда
  • 60
  • 0 / 0
небольшая поправочка, строка 65, а не 65... но в моем случае не помогло.

Спасибо за помощь
*

mayson_ml

  • Захожу иногда
  • 60
  • 0 / 0
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Решено] Невидимая регистрация ( Покупка без регистрации ) V1.1.3

Автор urodoff

Ответов: 319
Просмотров: 110047
Последний ответ 27.10.2014, 15:27:02
от gaalferov
[Решено] Отобразить кол-во товаров из всех подкатегорий V1.1.3

Автор bazic

Ответов: 19
Просмотров: 14312
Последний ответ 18.09.2014, 06:39:33
от fila61
вывод категории и её подкатегорий на одной странице

Автор sega

Ответов: 44
Просмотров: 16267
Последний ответ 30.04.2014, 14:05:45
от ИринаМ
[Решено] Добавление Watermark к фото товара V1.0.15 V1.1.3

Автор mickymouse

Ответов: 52
Просмотров: 23206
Последний ответ 13.06.2013, 01:04:46
от richman
[Решено] Как изменить ,товаров в наличии 1 на "есть в наличии" V1.0.15 V1.1.3

Автор ButuzOFF

Ответов: 93
Просмотров: 41963
Последний ответ 17.05.2013, 21:10:44
от sa1981