Новости Joomla

Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1

Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1

👩‍💻 Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1. Это релиз, в который включены уже проверенные изменения, но ещё очень многие исправления и улучшения ждут своей очереди. Joomla следит за качеством и безопасностью своего кода и каждое изменение должно быть успешно протестировано как минимум ещё двумя участниками сообщества. Разработка Joomla ведётся на платформе GitHub.Филипп Уолтон (Philip Walton) - один из разработчиков, кто активно вносит свой вклад в ядро Joomla. Он уже несколько месяцев посвящает свои послеполуденные часы пятницы работе с Joomla и предлагает присоединиться к нему. 📆 Пятница, 30 мая 2025, с 15:00 до 17:00 по UTC (Лондон) - с 18:00 до 20:00 по Москве.В чате Google Meet Филипп готов помочь с тестированием тем, кто будет делать это в первый раз. А так же он подготовил список лёгких Pull Request, которые можно протестировать довольно быстро. Чем больше тестов будет проведено сейчас, тем меньше ошибок вылезет потом. На данный момент 148 (уже 147 на момент написания заметки) PR на GitHub Joomla ждут тестирования.👩‍💻 Open to all. All together.Также вам поможет сделать первые шаги это видео.GitHub JoomlaДа, это вечер пятницы. Но тестирование занимает порой минут 15, а доброе дело сделано. Просто убедитесь, что разработчик чего-то не пропустил и всё работает как ожидается.#joomla #joomla6 #community

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

John_Flores

  • Захожу иногда
  • 54
  • 0 / 0
Здравствуйте.  Столкнулся с проблемой, что при нажатии добавить в корзину, не всплывает окно что товар был добавлен и вообще визуально не как не реагирует на нажатие, но после обновления страницы показывает что товар был добавлен. Подскажите пожалуйста как включить эту функцию, что при нажатии на кнопку добавить в корзину была какая то видимая реакция, что товар добавлен. В идеале конечно лучше бы чтоб всплывало сообщение что товар добавлен, но если это сложно то хотя бы чтоб перенаправляло сразу в корзину. Заранее благодарю!

Сайт https://valfex.kg/new/index.php/gibkaya-podvodka-i-shlangi - по этой ссылке можете глянуть суть проблемы
*

John_Flores

  • Захожу иногда
  • 54
  • 0 / 0
Re: Не всплывает корзина K2 store
« Ответ #1 : 18.09.2020, 08:54:33 »
В принципе я так понял что уже в коде это реализовано, но почему то не срабатывает.

<!-- Кнопка добавить в корзину -->

Код
<?php if($inventoryCheck->can_allow || $inventoryCheck->backorder):?>
<div id='add_to_cart_<?php echo $item->product_id; ?>' class="k2store_add_to_cart" style="display: block;">
        <input type="hidden" id="k2store_product_id" name="product_id" value="<?php echo $item->product_id; ?>" />

        <?php echo JHTML::_( 'form.token' ); ?>
        <input type="hidden" name="return" value="<?php echo base64_encode( JUri::getInstance()->toString() ); ?>" />
        <input value="<?php echo JText::_('K2STORE_ADD_TO_CART'); ?>" type="submit" class="k2store_cart_button btn btn-primary" />
    </div>
   <?php if($inventoryCheck->backorder && $inventoryCheck->can_allow == 0):?>
   <div class="backorder_info alert alert-info">
    <?php echo JText::_('K2STORE_ADDTOCART_BACKORDER_ALERT'); ?>
   </div>
   <?php endif;?>
     <?php else: ?>
     <div class="k2store_no_stock">
      <input value="<?php echo JText::_('K2STORE_OUT_OF_STOCK'); ?>" type="button" class="k2store_cart_button k2store_button_no_stock btn btn-warning" />
     </div>
<?php endif; ?>

Ниже описанный блок я так понял отвечает за всплывающее окно, но оно не всплывает :) Если убрать стиль display: none; то окно всегда расположенно под кнопкой, не зависимо добавлен товар или нет

Код
         <div class="k2store-notification" style="display: none;">
<div class="message"></div>
<div class="cart_link"><a class="btn btn-success" href="<?php echo $action; ?>"><?php echo JText::_('K2STORE_VIEW_CART')?></a></div>
<div class="cart_dialogue_close" onclick="jQuery(this).parent().slideUp().hide();">X</div>
</div>
« Последнее редактирование: 18.09.2020, 08:59:07 от John_Flores »
*

John_Flores

  • Захожу иногда
  • 54
  • 0 / 0
Re: Не всплывает корзина K2 store
« Ответ #2 : 22.09.2020, 10:43:01 »
Ошибка оказалась в javascript файлах. В файле расположенном в папке media/jui/js/jquery.min.js а так же в файле media/k2store/js/k2store.js

Ошибка заключается в следующем: При вызове всплывающего окна на сайте, появляется новая ошибка "POST 500 (Internal server error)" в консоле браузера (на скрине расположенном внизу видна эта ошибка)


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

sivers

  • Живу я здесь
  • 2578
  • 357 / 0
Re: Не всплывает корзина K2 store
« Ответ #3 : 22.09.2020, 21:21:40 »
Там скорее всего проблема не с JS, а с K2store - в методе добавления (add). Потому что ругань идет на использование $this там, где его нет (0 - Using $this when not in object context).
Смотрите логи. Ищите метод add в модели (или контроллере) mycart и смотрите что там не так с использованием $this.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

John_Flores

  • Захожу иногда
  • 54
  • 0 / 0
Re: Не всплывает корзина K2 store
« Ответ #4 : 24.09.2020, 08:40:27 »
Включил отображение ошибок на сайте, и отобразило:
Код
Warning: Declaration of K2StoreControllerMyCart::display() should be compatible with K2StoreController::display($cachable = false, $urlparams = Array) in /var/www/user30440/data/www/valfex.kg/new/components/com_k2store/controllers/mycart.php on line 21
Как раз как вы и говорили что в контроллерах дело, но посмотрев код, так и не понял в чем там проблема, может Вы что увидите? А то уже неделю бьюсь с этой ошибкой и не как не могу запустить сайт  *ОХ-Х-Х*

Код файла ../controllers/mycart.php публикую ниже:
Строка 21 на которую ругается система пишется так: class K2StoreControllerMyCart extends K2StoreController

Код
<?php
/*------------------------------------------------------------------------
# com_k2store - K2 Store
# ------------------------------------------------------------------------
# author    Ramesh Elamathi - Weblogicx India http://www.weblogicxindia.com
# copyright Copyright (C) 2012 Weblogicxindia.com. All Rights Reserved.
# @license - http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
# Websites: http://k2store.org
# Technical Support:  Forum - http://k2store.org/forum/index.html
-------------------------------------------------------------------------*/



// no direct access
defined('_JEXEC') or die('Restricted access');

jimport('joomla.application.component.controller');
//load the cart data
require_once (JPATH_COMPONENT.'/helpers/cart.php');
require_once (JPATH_ADMINISTRATOR.'/components/com_k2store/library/tax.php');
class K2StoreControllerMyCart extends K2StoreController // НА ЭТУ СТРОЧКУ РУГАЕТСЯ ЕСЛИ ОТОБРАЗИТЬ ОШИБКИ
{

private $_data = array();

var $tax = null;

public function __construct($config = array())
{
parent::__construct($config);
$this->tax = new Tax();
}

function display() {

//initialist system objects
$app = JFactory::getApplication();
$session=  JFactory::getSession();
$params = JComponentHelper::getParams('com_k2store');
$view = $this->getView( 'mycart', 'html' );
$view->set( '_view', 'mycart' );
//get post vars
$post = $app->input->getArray($_POST);

$model = $this->getModel('mycart');

        if (K2StoreHelperCart::hasProducts()) {
        $items = $model->getDataNew();
        } else {
        $items = array();
        }

        //coupon
        $post_coupon = $app->input->getString('coupon', '');
        //first time applying? then set coupon to session
        if (isset($post_coupon) && !empty($post_coupon)) {
        try {
        if($this->validateCoupon()) {
        $session->set('coupon', $post_coupon, 'k2store');
        $msg = JText::_('K2STORE_COUPON_APPLIED_SUCCESSFULLY');
        }
        } catch(Exception $e) {
        $msg = $e->getMessage();
        }
        $this->setRedirect( JRoute::_( "index.php?option=com_k2store&view=mycart"), $msg);
        }

        if ($post_coupon) {
        $view->assign( 'coupon', $post_coupon);
        } elseif ($session->has('coupon', 'k2store')) {
        $view->assign( 'coupon', $session->get('coupon', '', 'k2store'));
        } else {
        $view->assign( 'coupon', '');
        }

$cartobject = $this->checkItems($items, $params->get('show_tax_total'));

$totals = $this->getTotals();

$view->assign( 'cartobj', $cartobject);
$view->assign( 'totals', $totals);
$view->assign( 'model', $model);
$view->assign( 'params', $params );
if(isset($post['return'])) {
$view->assign( 'return', $post['return']);
}
$view->set( '_doTask', true);
$view->set( 'hidemenu', true);
$view->setModel( $model, true );
$view->setLayout( 'default');
$view->display();

}


function add() {
$app = JFactory::getApplication();
header('Content-Type: text/html; charset=utf-8');
$params = JComponentHelper::getParams('com_k2store');
$model = $this->getModel('mycart');
require_once(JPATH_COMPONENT.'/helpers/cart.php');
$error = array();
$json = array();
//get the product id
$product_id = $app->input->getInt('product_id', 0);

//no product id?. return an error
if(empty($product_id)) {
$error['error']['product']=JText::_('K2STORE_ADDTOCART_ERROR_MISSING_PRODUCT_ID');
echo json_encode($error);
$app->close();
}


//Ok. we have a product id. so proceed.
//get the quantity
$quantity = $app->input->get('product_qty');
if (isset($quantity )) {
$quantity = $quantity;
} else {
$quantity = 1;
}

//get the product options
$options = $app->input->get('product_option', array(0), 'ARRAY');
if (isset($options )) {
$options =  array_filter($options );
} else {
$options = array();
}
$product_options = $model->getProductOptions($product_id);

//iterate through stored options for this product and validate
foreach($product_options as $product_option) {
if ($product_option['required'] && empty($options[$product_option['product_option_id']])) {
$json['error']['option'][$product_option['product_option_id']] = JText::sprintf('K2STORE_ADDTOCART_PRODUCT_OPTION_REQUIRED', $product_option['option_name']);
}
}

//validation is ok. Now add the product to the cart.
if(!$json) {
K2StoreHelperCart::add($product_id, $quantity, $options);
$product_info = K2StoreHelperCart::getItemInfo($product_id);
$cart_link = JRoute::_('index.php?option=com_k2store&view=mycart');
$json['success'] = true;
$json['successmsg'] = $product_info->product_name.JText::sprintf('K2STORE_ADDTOCART_ADDED_TO_CART');

$total =  K2StoreHelperCart::getTotal();
$product_count = K2StoreHelperCart::countProducts();
//get product total
$json['total'] = JText::sprintf('K2STORE_CART_TOTAL', $product_count, K2StorePrices::number($total));
//get cart info

//do we have to redirect to the cart
if($params->get('popup_style', 1)==3) {
$json['redirect'] = $cart_link;
}


} else {

//do we have to redirect
// $url = 'index.php?option=com_k2&view=item&id='.$product_id;
// $json['redirect'] = JRoute::_($url);
}
echo json_encode($json);
$app->close();
}


function ajaxmini() {
header('Content-Type: text/html; charset=utf-8');
//initialise system objects
$app = JFactory::getApplication();
$params = JComponentHelper::getParams('com_k2store');

$model = $this->getModel('mycart');
if(K2StoreHelperCart::hasProducts()) {
$totals = $this->getTotals();
$product_count = K2StoreHelperCart::countProducts();
$html = JText::sprintf('K2STORE_CART_TOTAL', $product_count, K2StorePrices::number($totals['total']));
} else {
$html = JText::_('K2STORE_NO_ITEMS_IN_CART');
}
echo $html;
$app->close();
}

/**
     *
     * @return unknown_type
     */
    function update()
    {
        $app = JFactory::getApplication();
        $params = JComponentHelper::getParams('com_k2store');
        $model = $this->getModel('mycart');

        $key = $app->input->getString('key');

        $quantities = $app->input->get('quantity', array(0), 'ARRAY');

    $msg = JText::_('K2STORE_CART_UPDATED');

        $remove = $app->input->get('remove');
        if ($remove)
        {
        $model->remove($key);
        }
        else
        {
            foreach ($quantities as $key=>$value)
            {
               $model->update($key, $value);
            }
        }

        $popup = JRequest::getVar('popup');
        if($popup && $remove) {
$items = $model->getDataNew();

$cartobject = $this->checkItems($items, $params->get('show_tax_total'));

$view = $this->getView( 'mycart', 'html' );
$view->set( '_view', 'mycart' );
$view->set( '_doTask', true);
$view->set( 'hidemenu', true);

if($popup==1) {
$view->setLayout( 'ajax');
} else {
$view->setLayout( 'default');
}
$view->setModel( $model, true );
$totals = $this->getTotals();

$view->assign( 'cartobj', $cartobject);
$view->assign( 'totals', $totals);
$view->assign( 'params', $params );
$view->assign( 'popup', $popup );
$view->assign( 'remove', $remove);

ob_start();
$view->display();
$html = ob_get_contents();
ob_end_clean();
echo $html;
$app->close();
}

        $redirect = JRoute::_( "index.php?option=com_k2store&view=mycart");
        $this->setRedirect( $redirect, $msg);
    }

    /**
     *
     * Method to check config, user group and product state (if recurs).
     * Then get right values accordingly
     * @param array $items - cart items
     * @param boolean - config to show tax or not
     * @return object
     */
    function checkItems( &$items, $show_tax=false)
    {
    if (empty($items)) { return array(); }
$params = JComponentHelper::getParams('com_k2store');

    $this->_data['products'] = array();

    foreach ($items as $product) {
    $product_total = 0;

    foreach ($items as $product_2) {
    if ($product_2['product_id'] == $product['product_id']) {
    $product_total += $product_2['quantity'];
    }
    }

    //options
    $option_data = array();

    foreach ($product['option'] as $option) {

    $value = $option['option_value'];
    $option_data[] = array(
    'name'  => $option['name'],
    'value' => (utf8_strlen($value) > 20 ? utf8_substr($value, 0, 20). '..' : $value)
    );
    }

    // Display prices
    $price = $this->tax->calculate($product['price'], $product['tax_profile_id'], $params->get('show_tax_total'));

    $total = $this->tax->calculate($product['price'], $product['tax_profile_id'], $params->get('show_tax_total')) * $product['quantity'];

    $tax_amount = '';
    $this->_data['products'][] = array(
    'key'      => $product['key'],
    'product_id'     => $product['product_id'],
    'product_name'     => $product['name'],
    'product_model'    => $product['model'],
    'product_options'   => $option_data,
    'quantity' => $product['quantity'],
    // 'stock'    => $product['stock'] ? true : !(!$this->config->get('config_stock_checkout') || $this->config->get('config_stock_warning')),
    'tax_amount'    => $tax_amount,
    'price'    => $price,
    'total'    => $total
    );

    }
    $cartObj = JArrayHelper::toObject($this->_data['products']);
    return $cartObj;
    }

    function validateCoupon() {

    $app = JFactory::getApplication();
    $coupon_info = K2StoreHelperCart::getCoupon($app->input->getString('coupon', ''));

    if($coupon_info ) {
    return true;
    } else {
throw new Exception(JText::_('K2STORE_COUPON_INVALID'));
    return false;
    }


    }

    function getTotals() {
$app = JFactory::getApplication();
    $session = JFactory::getSession();
$model = $this->getModel('mycart');
$products =$model->getDataNew();
    $total_data = array();
    $total = 0;
    //sub total
    $total_data['subtotal'] = K2StoreHelperCart::getSubtotal();
    $total +=$total_data['subtotal'];
    //taxes
    $tax_data = array();
    $taxes = K2StoreHelperCart::getTaxes();

    //coupon
if($session->has('coupon', 'k2store')) {
    $coupon_info = K2StoreHelperCart::getCoupon($session->get('coupon', '', 'k2store'));

    if ($coupon_info) {
    $discount_total = 0;

    if (!$coupon_info->product) {
    $sub_total =K2StoreHelperCart::getSubTotal();
    } else {
    $sub_total = 0;
    foreach ($products as $product) {
    if (in_array($product['product_id'], $coupon_info->product)) {
    $sub_total += $product['total'];
    }
    }
    }

    if ($coupon_info->value_type == 'F') {
    $coupon_info->value = min($coupon_info->value, $sub_total);
    }

    foreach ($products as $product) {
    $discount = 0;

    if (!$coupon_info->product) {
    $status = true;
    } else {
    if (in_array($product['product_id'], $coupon_info->product)) {
    $status = true;
    } else {
    $status = false;
    }
    }

    if ($status) {
    if ($coupon_info->value_type == 'F') {
    $discount = $coupon_info->value * ($product['total'] / $sub_total);
    } elseif ($coupon_info->value_type == 'P') {
    $discount = $product['total'] / 100 * $coupon_info->value;
    }

    if ($product['tax_profile_id']) {

    $tax_rates = $this->tax->getRates($product['total'] - ($product['total'] - $discount), $product['tax_profile_id']);
    foreach ($tax_rates as $tax_rate) {
    // if ($tax_rate['value_type'] == 'P') {
    $taxes[$tax_rate['taxrate_id']] -= $tax_rate['amount'];
    // }
    }
    }
    }

    $discount_total += $discount;
    }

    $total_data['coupon'] = array(
    'title'      => JText::sprintf('K2STORE_COUPON_TITLE', $session->get('coupon', '', 'k2store')),
    'value'      => -$discount_total
    );

    //$total_data['coupon'] = $coupon_data;
    //less the coupon discount in the total
    $total -= $discount_total;
    }

}

    //taxes
    foreach ($taxes as $key => $value) {
    if ($value > 0) {
    $tax_data[]= array(
    'title'      => $this->tax->getRateName($key),
    'value'      => $value
    );
    $total += $value;
    }
    }
    $total_data['taxes'] = $tax_data;

    $total_data['total'] = $total;

    return $total_data;

    }
}
« Последнее редактирование: 24.09.2020, 08:44:14 от John_Flores »
*

sivers

  • Живу я здесь
  • 2578
  • 357 / 0
Re: Не всплывает корзина K2 store
« Ответ #5 : 24.09.2020, 08:50:33 »
может Вы что увидите?
Он говорит, что ваш метод display по составу аргументов не совпадает с родительским. А должен. добавьте в объявление своего display требуемые аргументы, чтоб получилось:
вместо
Код
function display() {
вот это:
Код
function display($cachable = false, $urlparams = array()) {
и больше ничего не меняйте.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

John_Flores

  • Захожу иногда
  • 54
  • 0 / 0
Re: Не всплывает корзина K2 store
« Ответ #6 : 24.09.2020, 10:40:09 »
Спасибо пользователю Sivers, помог через личку) :D
Проблема ошибки 500 оказалось в файле com_k2store/helpers/cart.php, там нужно строку $this->data = array(); заменить на if(isset($this)) $this->data = array();
и ошибка 500 исчезает, и при нажатии на кнопку "В корзину" добавляется товар и идет переотправка в корзину.
*

John_Flores

  • Захожу иногда
  • 54
  • 0 / 0
Re: Не всплывает корзина K2 store
« Ответ #7 : 24.09.2020, 11:04:04 »
А чтобы при добавлении товара было всплывающее окно, достаточно в админке, в настройках K2Store в блоке Cart Settings - сменить в пункте Cart popup style - настройку с "Redirect to default Cart viev" на "Small".

До того как поправили выше описанные ошибки, эти махинации в настройках не как не помогали. А теперь все робит, благодаря пользователю Sivers!)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

K2 Store - вывод Product Options в карточке товара

Автор John_Flores

Ответов: 1
Просмотров: 936
Последний ответ 26.11.2021, 12:04:32
от John_Flores
J2 Store + K2 интеграция

Автор lgmax

Ответов: 0
Просмотров: 1093
Последний ответ 09.03.2020, 14:46:16
от lgmax
k2 store не активны кнопки

Автор rwgusev

Ответов: 5
Просмотров: 1680
Последний ответ 22.01.2018, 15:03:28
от Andrey Spiridonov
Как добавить слово "Цена:" к отображению цены в K2 Store?

Автор Emiltito

Ответов: 2
Просмотров: 1516
Последний ответ 14.12.2017, 18:42:25
от bybus
K2 Store уведомления по почте

Автор kapustin

Ответов: 1
Просмотров: 1386
Последний ответ 03.10.2017, 15:00:14
от Parahot