Новости Joomla

Вышел компонент интернет-магазина HikaShop 6.1.0.Один из известных компонентов магазина для Joomla

Вышел компонент интернет-магазина HikaShop 6.1.0.Один из известных компонентов магазина для Joomla

👩‍💻 Вышел компонент интернет-магазина HikaShop 6.1.0.Один из известных компонентов магазина для Joomla.v.6.1.0 Что нового?Модуль корзины. Отображение корзины в виде offcanvas-элемента.Кнопка выхода в панели управления пользователя. Что тут сказать, просто добавили. Отправка писем только для заказов, оплаченных определёнными способами. Это удобно для рассылки сообщений, привязанных к региону или провайдеру (например, инструкции по банковскому переводу только для заказов, оплаченных банковским переводом).Листинг выплат по партнерской системе. В разделе управления партнёрскими программами появилось новое подменю «Выплаты», в котором перечислены выплаты партнёрам (упрощённое отслеживание и сверка). Добавлены настройки, благодаря которым можно определить категории товаров, на которые начисляется партнёрская комиссия с продаж.Список комплектов товаров. Система комплектов позволяет отслеживать остатки товаров, продаваемых в комплекте.Подробнее в блоге Hikashop.Поскольку мы не сообщали ранее о Hikashop 6.0, то вкратце скажем, что он вышел в июне 2025г. В новой версии было:- 13 исправлений ошибок- 17 улучшений. В частности:- - Hikashop теперь проверяет UserAgent пользователя перед добавлением товара в корзину, чтобы отсечь ботов. Ведь компонент хранит корзины в базе данных.- - улучшен роутинг компонента, позволяющий использовать в названии товара даже слеши.- - улучшения фильтра товаров - ускорение загрузки категорий/брендов/характеристик.- 4 новых функции:- - добавлена поддержка Joomla 6.0.- - Улучшена возможность адаптации форм HikaShop на фронтенде к шаблонам, не использующим стандартные классы Joomla.- - Плагин внутреннего баланса: возможность исключить уцененные товары из начисленных баллов.- - Теперь можно выбирать склады для вариантов товаров.Подробнее в Changelog Hikashop.Также при работе с Hikashop стоит учитывать, что один и тот же код поддерживает версии Joomla от 3.х до 5.х, а в таблице сравнения версий заявлена и Joomla 2.5. Беглый просмотр кода показал, что компонент как был, так и остался старым и для совместимости с Joomla 4+ просто добавлен плагин.@joomlafeed#joomla #расширения #hikashop

На сколько актуально делать сайт в 2025 году? Битва с нейросетями и выбор CMSНовый выпуск подкаста...

На сколько актуально делать сайт в 2025 году? Битва с нейросетями и выбор CMSНовый выпуск подкаста...

На сколько актуально делать сайт в 2025 году? Битва с нейросетями и выбор CMSНовый выпуск подкаста "Просто о Digital"Гость:🎙 Владимир Сергеенко ( https://t.me/aixman ) • Интернет-маркетолог с 14-летним опытом• Соавтор книги «Нетворкинг»• Спикер конференции Ассоциации директоров по развитиюВедущий:💻 Игорь Филипенко ( https://t.me/igorleee )• Программист и предприниматель с 16-летним опытом в digital• Основатель подкаста "Просто о Digital"• Специалист по автоматизации бизнес-процессовВ этом выпуске вы узнаете:🔥 Актуальность сайтов в эпоху нейросетей• Актуален ли сайт сейчас и будет ли актуален в будущем?• Зачем нужен сайт? Есть ли иные инструменты привлечения клиентов?🤖 Нейросети vs Поисковики vs Сайты• Почему нейросети не заменят сайты в B2B-сегменте• Как Google и Яндекс меняют алгоритмы из-за AI-конкуренции📊 Сайт как центр вселенной вашего трафика• Почему без сайта вы сливаете 40% маркетингового бюджета впустую?🛡 Безопасность и Joomla 6.0• Как отфильтровать 99% ботов и сэкономить на трафике• Почему Joomla теперь обходит WordPress в безопасности и скорости⚖️ Выбор платформы: битва CMS• WordPress: 50% рынка но 80% уязвимостей• Joomla: профессиональная CMS для сложных проектов• Drupal: почему его похоронили в 2023 году• Tilda: когда конструктор выгоднее CMSПриятного просмотра/прослушивания!RSS: https://cloud.mave.digital/61930Mave: https://igorfilipenko.mave.digitalЯндекс Музыка: https://music.yandex.ru/album/35840190Telegram Mave: https://t.me/mavestreambot/app?startapp=igorfilipenkoApple Podcasts: https://podcasts.apple.com/us/podcast/просто-о-digital-и-бизнесе/id1801903450ВКонтакте: https://vk.com/podcasts-12488584Youtube: https://www.youtube.com/playlist?list=PLfR6jTpnkohDDco32xZ-KyMyWi_S5Xdy2=========================Видео-формат подкаста:Rutube: https://rutube.ru/video/b5762754f9d3e0dc382f32f3034be0a2/Youtube: https://youtu.be/nu1XF2jNbxY#подкаст #podcast

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

vlom

  • Осваиваюсь на форуме
  • 37
  • 2 / 0
Кто подскажет как можно выбор способа оплаты вынести на страницу адреса доставки
Пока нашел только вот такой вот компонент http://nevigen.com/razrabotki/platnye-resheniya/addony/onestepcheckout-joomshopping.html
Но он платный, хоть цена и копеешная, но платить за этот модуль не хотят. Перерыл интернет, ни чего не нашел похожего,
может кто подскажет альтернативу или у кого либо есть нулевая версия этого адона,
*

mohax

  • Давно я тут
  • 901
  • 66 / 3
Вы серьезно? Вообще-то автор этого аддона посещает этот форум! Тут уж два варианта: купить или написать самому и раздавать бесплатно. А если найдете нуленый, то указать автору чтобы прикрыли лавочку. Тебе что, 300 рублей жалко? Из своей оплаты выложи. *много не литературного текста*
*

vlom

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

vlom

  • Осваиваюсь на форуме
  • 37
  • 2 / 0
уже по немногу начал разбираться, но немного наверное неправильно, я так понял надо ковырять контроллер checkout.php
может кто подсказать куда копать более конкретнее
*

vlom

  • Осваиваюсь на форуме
  • 37
  • 2 / 0
есть предположение объеденить function step2 и function step3
а также function step2save и function step3save
в общем все из третьего шага толкаем во второй, и получаем один шаг(по ка это только в теории)
но при этом предпоследней строчкой в function step2save заменяем
на $checkout->setMaxStep(4); то бишь предаем не 3 а четыре
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Мне всегда жаль денег если я не могу это выполнить сам
а при чем тут не литературный текст?
А если можете выполнить сам, то денег не жалко? Может все-таки наоборот? :)
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

nevigen

  • Moderator
  • 10449
  • 863 / 25
  • http://n*****n.com
Жадность не порок, а путь к бедности!
Ломать не строить. Если Вы хотите создать,  мы все будем только рады.
Напрминаю,  по правилам форума варез запрещен.

ЗЫ. Интересно если бы я обратился с просьбой поламать Вашу работу,  какова должна была бы быть Ваша реакция?
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

vlom

  • Осваиваюсь на форуме
  • 37
  • 2 / 0
Цитировать
ЗЫ. Интересно если бы я обратился с просьбой поламать Вашу работу,  какова должна была бы быть Ваша реакция?
Если честно, безразлично, но когда напишу что либо стоящее, будет бесплатно...
*

vlom

  • Осваиваюсь на форуме
  • 37
  • 2 / 0
Круто вроде как получилось, только это еще тот корявый костыль,
в общем преобразовал function step2 и function step2save следующим образом
может кто и подскажет где у меня могут быть дыры
Код: php
    function step2(){
        $checkout = &JModel::getInstance('checkout', 'jshop');
        $checkout->checkStep(2);
        
        JPluginHelper::importPlugin('jshoppingcheckout');
        $dispatcher =& JDispatcher::getInstance();        
        $dispatcher->trigger('onLoadCheckoutStep2', array() );
        
        $session =& JFactory::getSession();
        $user = &JFactory::getUser();
        $jshopConfig = &JSFactory::getConfig();
        $country = &JTable::getInstance('country', 'jshop');
        
        $checkLogin = JRequest::getInt('check_login');
        if ($checkLogin){            
            $session->set("show_pay_without_reg", 1);
            checkUserLogin();
        }

        appendPathWay(_JSHOP_CHECKOUT_ADDRESS);
        $seo = &JTable::getInstance("seo", "jshop");
        $seodata = $seo->loadData("checkout-address");
        if ($seodata->title==""){
            $seodata->title = _JSHOP_CHECKOUT_ADDRESS;
        }
        setMetaData($seodata->title, $seodata->keyword, $seodata->description);
        
        $this->_showCheckoutNavigation(2);
        if ($jshopConfig->show_cart_all_step_checkout){
            $this->_showSmallCart(2);
        }
        
        $cart = &JModel::getInstance('cart', 'jshop');
        $cart->load();
        $cart->getSum();

        if ($user->id){
            $adv_user = &JSFactory::getUserShop();
        }else{
            $adv_user = &JSFactory::getUserShopGuest();    
        }
        
        $tmp_fields = $jshopConfig->getListFieldsRegister();
        $config_fields = $tmp_fields['address'];
        $count_filed_delivery = 0;
        foreach($config_fields as $k=>$v){
            if (substr($k, 0, 2)=="d_" && $v['display']==1) $count_filed_delivery++;
        }
                
        $view_name = "checkout";
        $view_config = array("template_path"=>JPATH_COMPONENT."/templates/".$jshopConfig->template."/".$view_name);
        $view = &$this->getView($view_name, getDocumentType(), '', $view_config);
        $view->setLayout("adress");                        
        $view->assign('select', $jshopConfig->arr['title']);
        
        //Payments
        $paymentmethod = &JTable::getInstance('paymentmethod', 'jshop');
        $all_payment_methods = jshopPaymentMethod::getAllPaymentMethods();
        $i = 0;
        $paym = array();
        foreach ($all_payment_methods as $pm) {
            if (file_exists($jshopConfig->path . 'payments/'.$pm->payment_class."/".$pm->payment_class.'.php')){
                require_once ($jshopConfig->path . 'payments/'.$pm->payment_class."/".$pm->payment_class.'.php');
                $paym[$i]->existentcheckform = 1;
            }else{
                $paym[$i]->existentcheckform = 0;
            }
            
            $paym[$i]->name = $pm->name;
            $paym[$i]->payment_id = $pm->payment_id;
            $paym[$i]->payment_class = $pm->payment_class;
            $paym[$i]->payment_description = $pm->description;
            $paym[$i]->price_type = $pm->price_type;
            $paym[$i]->image = $pm->image;
            if ($pm->price_type==2){
                $paym[$i]->calculeprice = $pm->price;
            }else{
                $paym[$i]->calculeprice = getPriceCalcParamsTax($pm->price * $jshopConfig->currency_value, $pm->tax_id);
            }
            
            $s_payment_method_id = $cart->getPaymentId();
            if ($s_payment_method_id == $pm->payment_id){
                $params = $cart->getPaymentParams();
            }else{
                $params = array();
            }

            $parseString = new parseString($pm->payment_params);
            $pmconfig = $parseString->parseStringToParams();            

            if ($paym[$i]->existentcheckform){
                ob_start();
                call_user_func(array($pm->payment_class, 'showPaymentForm'), $params, $pmconfig);
                $paym[$i]->form = ob_get_contents();
                ob_get_clean();
            }else{
                $paym[$i]->form = "";
            }
            
            $i++;          
        }
        
        $s_payment_method_id = $cart->getPaymentId();
        $active_payment = intval($s_payment_method_id);

        if (!$active_payment){
            $list_payment_id = array();
            foreach($paym as $v){            
                $list_payment_id[] = $v->payment_id;
            }
            if (in_array($adv_user->payment_id, $list_payment_id)) $active_payment = $adv_user->payment_id;
        }
        
        if (!$active_payment){
            if (isset($paym[0])){
                $active_payment = $paym[0]->payment_id;
            }
        }
        $view->assign('payment_methods', $paym);
        $view->assign('active_payment', $active_payment);
        //end payments
        
        if (!$adv_user->country) $adv_user->country = $jshopConfig->default_country;
        if (!$adv_user->d_country) $adv_user->d_country = $jshopConfig->default_country;

        $option_country[] = JHTML::_('select.option',  '0', _JSHOP_REG_SELECT, 'country_id', 'name' );
        $option_countryes = array_merge($option_country, jshopCountry::getAllCountries());
        $select_countries = JHTML::_('select.genericlist', $option_countryes, 'country', 'class = "inputbox" size = "1"','country_id', 'name', $adv_user->country );
        $select_d_countries = JHTML::_('select.genericlist', $option_countryes, 'd_country', 'class = "inputbox" size = "1"','country_id', 'name', $adv_user->d_country);

        foreach ($jshopConfig->arr['title'] as $key => $value) {                
            $option_title[] = JHTML::_('select.option', $key, $value, 'title_id', 'title_name');
        }            
        $select_titles = JHTML::_('select.genericlist', $option_title, 'title', 'class = "inputbox"','title_id', 'title_name', $adv_user->title);            
        $select_d_titles = JHTML::_('select.genericlist', $option_title, 'd_title', 'class = "inputbox"','title_id', 'title_name', $adv_user->d_title);
        
        $client_types = array();
        foreach ($jshopConfig->user_field_client_type as $key => $value) {        
            $client_types[] = JHTML::_('select.option', $key, $value, 'id', 'name' );
        }
        $select_client_types = JHTML::_('select.genericlist', $client_types,'client_type','class = "inputbox" onchange="showHideFieldFirm(this.value)"','id','name', $adv_user->client_type);
        
        filterHTMLSafe( $adv_user, ENT_QUOTES);

        $view->assign('select_countries', $select_countries);
        $view->assign('select_d_countries', $select_d_countries);
        $view->assign('select_titles', $select_titles);
        $view->assign('select_d_titles', $select_d_titles);
        $view->assign('select_client_types', $select_client_types);
        $view->assign('live_path', JURI::base());
        $view->assign('config_fields', $config_fields);
        $view->assign('count_filed_delivery', $count_filed_delivery);
        $view->assign('user', $adv_user);
        $view->assign('delivery_adress', $adv_user->delivery_adress);
        $view->assign('action', SEFLink('index.php?option=com_jshopping&controller=checkout&task=step2save', 0, 0, $jshopConfig->use_ssl));
        $dispatcher->trigger('onBeforeDisplayCheckoutStep2View', array(&$view));
        $view->display();    
    }
    
    function step2save(){
        $checkout = &JModel::getInstance('checkout', 'jshop');
        $checkout->checkStep(2);
        
        JPluginHelper::importPlugin('jshoppingcheckout');
        $dispatcher =& JDispatcher::getInstance();
        $dispatcher->trigger('onLoadCheckoutStep2save', array());
        
        $cart = &JModel::getInstance('cart', 'jshop');
        $cart->load();
        
        $session =& JFactory::getSession();
        $jshopConfig = &JSFactory::getConfig();          
        $post = JRequest::get('post');
        if (!count($post)){
            JError::raiseWarning("",_JSHOP_ERROR_DATA);
            $this->setRedirect(SEFLink('index.php?option=com_jshopping&controller=checkout&task=step2',0,1, $jshopConfig->use_ssl));
            return 0;
        }
        
        unset($post['user_id']);
        unset($post['usergroup_id']);
        
        $user = &JFactory::getUser();
        if ($user->id){
            $adv_user = &JTable::getInstance('userShop', 'jshop');        
            $adv_user->load($user->id);
        }else{
            $adv_user = &JSFactory::getUserShopGuest();
        }
        
        $adv_user->bind($post);
        if(!$adv_user->check("address")){
            JError::raiseWarning("",$adv_user->getError());
            $this->setRedirect(SEFLink('index.php?option=com_jshopping&controller=checkout&task=step2',0,1, $jshopConfig->use_ssl));
            return 0;
        }
        
        $dispatcher->trigger( 'onBeforeSaveCheckoutStep2', array(&$adv_user, &$user, &$cart) );
        
        if(!$adv_user->store()){
            JError::raiseWarning(500,_JSHOP_REGWARN_ERROR_DATABASE);
            $this->setRedirect(SEFLink('index.php?option=com_jshopping&controller=checkout&task=step2',0,1, $jshopConfig->use_ssl));
            return 0;
        }
        
        if ($user->id){
            $user = clone(JFactory::getUser());
            $user->email = $adv_user->email;
            $user->name = $adv_user->f_name;
            $user->save();
        }
        
        setNextUpdatePrices();
        
        $dispatcher->trigger( 'onAfterSaveCheckoutStep2', array(&$adv_user, &$user, &$cart) );
        
        //Payments
        $payment_method = JRequest::getVar('payment_method'); //class payment method
        $params = JRequest::getVar('params');
        $params_pm = $params[$payment_method];
        
        $paym_method = &JTable::getInstance('paymentmethod', 'jshop');
        $paym_method->class = $payment_method;
        $payment_method_id = $paym_method->getId();
        $paym_method->load($payment_method_id);
        $pmconfigs = $paym_method->getConfigs();
        
        if (!file_exists($jshopConfig->path . 'payments/'.$payment_method."/".$payment_method.'.php')) {
            $existentcheckform = 0;
        }else{
            $existentcheckform = 1;
            include_once($jshopConfig->path . 'payments/'.$payment_method."/".$payment_method.'.php');
            
            if (!class_exists($payment_method)) {                
                $cart->setPaymentParams('');
                JError::raiseWarning(500, _JSHOP_ERROR_PAYMENT);
                $this->setRedirect(SEFLink('index.php?option=com_jshopping&controller=checkout&task=step3',0,1,$jshopConfig->use_ssl));
                return 0;
            }
            
            $payment_system = new $payment_method();
            
            if (!$payment_system->checkPaymentInfo($params_pm, $pmconfigs)){
                $cart->setPaymentParams('');
                JError::raiseWarning("", $payment_system->getErrorMessage());
                $this->setRedirect(SEFLink('index.php?option=com_jshopping&controller=checkout&task=step3',0,1,$jshopConfig->use_ssl));
                return 0;
            }            
        }                        
        
        $paym_method->setCart($cart);
        $cart->setPaymentId($payment_method_id);
        $cart->setPaymentPrice($paym_method->getPrice());
        $cart->setPaymentTax($paym_method->calculateTax());
        $cart->setPaymentTaxPercent($paym_method->getTax());        
        
        if (isset($params[$payment_method])) {
            $cart->setPaymentParams($params_pm);
        } else {
            $cart->setPaymentParams('');
        }        
        
        $adv_user->saveTypePayment($payment_method_id);
        
        $dispatcher->trigger( 'onAfterSaveCheckoutStep3save', array(&$adv_user, &$paym_method, &$cart) );
        //End payments
        
        if ($jshopConfig->without_shipping && $jshopConfig->without_payment) {
            $checkout->setMaxStep(5);
            $cart->setShippingId(0);
            $cart->setShippingPrId(0);
            $cart->setShippingPrice(0);
            $cart->setPaymentId(0);
            $cart->setPaymentParams("");
            $cart->setPaymentPrice(0);
            $this->setRedirect(SEFLink('index.php?option=com_jshopping&controller=checkout&task=step5',0,1, $jshopConfig->use_ssl));
            return 0;
        }
        
        if ($jshopConfig->without_payment){
            $checkout->setMaxStep(4);
            $cart->setPaymentId(0);
            $cart->setPaymentParams("");
            $cart->setPaymentPrice(0);
            $this->setRedirect(SEFLink('index.php?option=com_jshopping&controller=checkout&task=step4',0,1,$jshopConfig->use_ssl));
            return 0;
        }
                
        $checkout->setMaxStep(4);
        $this->setRedirect(SEFLink('index.php?option=com_jshopping&controller=checkout&task=step4',0,1,$jshopConfig->use_ssl));
    }
« Последнее редактирование: 05.05.2012, 08:26:02 от vlom »
*

koyot777

  • Захожу иногда
  • 136
  • 1 / 2
  • Не щекочи койота..
Круто вроде как получилось, только это еще тот корявый костыль,
в общем преобразовал function step2 и function step2save следующим образом
может кто и подскажет где у меня могут быть дыры

Привет, как успехи с переделкой? Выложи то что уже сделано, попробую внедрить все это в один шаг.
*

ctig

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
После объединения всех шагов, сколько секунд задержка после нажатия кнопки  "Оформить заказ"?
Если меньше 6 секунд, то мне будет интересна ваша разработка.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Фильтр товаров не отображается на странице поиска товаров

Автор Lemonez

Ответов: 8
Просмотров: 2649
Последний ответ 21.09.2022, 20:26:18
от Lemonez
Два модуля поиска на странице

Автор Ragivort

Ответов: 3
Просмотров: 1134
Последний ответ 06.09.2016, 15:52:38
от dmitry_stas
Модуль фильтра товаров на странице результатов поиска

Автор v-v

Ответов: 6
Просмотров: 1162
Последний ответ 13.06.2016, 13:07:55
от v-v
Оформление заказа в один шаг (не "быстрый заказ")

Автор patlot

Ответов: 5
Просмотров: 2069
Последний ответ 01.06.2015, 23:34:09
от nevigen
Вывод фильтра по характеристикам на странице всех товаров

Автор Алеша

Ответов: 6
Просмотров: 1368
Последний ответ 15.02.2014, 09:41:01
от nevigen