Новости Joomla

Astroid обновился до версии 3.3.7!

Astroid обновился до версии 3.3.7!

Astroid — это мощный фреймворк для дизайнеров и разработчиков, позволяющий создавать адаптивные, быстрые и надежные веб-сайты и шаблоны на базе Joomla.

Главное в новой версии:

-   Исправлена загрузка файлов макетов

В предыдущем крупном релизе Astroid 3.3.6 были сделаны важные улучшения:

Основные моменты:

  • Улучшенный UI/UX в ключевых областях конфигурации
  • Повышенная стабильность и согласованность в Layout Builder и Form Builder
  • Исправления ошибок на основе отзывов сообщества
  • Улучшенная обработка визуальных эффектов, границ и шрифтов

Улучшения:

  • Обновленный UX Layout Builder
  • Улучшенный эффект предзагрузчика
  • Улучшенный стиль границ
  • Улучшенный UI/UX вкладки «Layout» в Template Options

Исправления ошибок:

  • Решены проблемы с некорректными динамическими значениями
  • Исправлен Color Transform при прокрутке
  • Устранены проблемы с работой Form Builder в Article Layout и Module Layout Builder
  • Исправлена проблема с созданием ненужных временных файлов при обработке шрифтов

Скачать: https://github.com/templaza/astroid-framework/releases/tag/v3.3.7

Как тестировать Joomla PHP-разработчику? Компонент Patch tester.

👩‍💻 Как тестировать Joomla PHP-разработчику? Компонент Patch tester.Joomla - open source PHP-фреймворк с готовой админкой. Его основная разработка ведётся на GitHub. Для того, чтобы международному сообществу разработчиков было удобнее тестировать Pull Requests был создан компонент Patch Tester, который позволяет "накатить" на текущую установку Joomla именно те изменения, которые необходимо протестировать. На стороне инфраструктуры Joomla для каждого PR собираются готовые пакеты, в которых находится ядро + предложенные изменения. В каждом PR обычно находятся инструкции по тестированию: куда зайти, что нажать, ожидаемый результат. Тестировщики могут предположить дополнительные сценарии, исходя из своего опыта и найти баги, о которых сообщить разработчику. Или не найти, и тогда улучшение или исправление ошибки быстрее войдёт в ядро Joomla. Напомню, что для того, чтобы PR вошёл в ядро Joomla нужны минимум 2 положительных теста от 2 участников сообщества, кроме автора. Видео на YouTubeВидео на VK ВидеоВидео на RuTubeКомпонент на GitHub https://github.com/joomla-extensions/patchtester@joomlafeed#joomla #php #webdev #community

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

aldabergenovb

  • Новичок
  • 3
  • 0 / 0
Warning: Invalid argument supplied for foreach() in /home/dentkz/public_html/components/com_joomlakassa/views/cart/tmpl/default_items.php on line 62
Система JoomlaKassa
Ошибка в Корзине.
Код
<?php
/**
 * @version $Id: views/cart/tmpl/default_items.php
 * @package Joomla.Site
 * @subpackage com_joomlakassa
 * @copyright Copyright (C) 2007 - 2014 Open Source Matters, Inc. All rights reserved.
 * @license Commercial Software; see LICENSE.txt
 * @author      GeneticsPro Eugene Gal'chuk - http://www.geneticspro.net/, admin@geneticspro.net
 */

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

// Если продуктов нет в корзине
if (!$this->cart) {
echo '<h3>'. JText::_('COM_JOOMLAKASSA_CART_NO_PRODUCTS').'</h3>';
return false;
}

JHtml::addIncludePath(JPATH_COMPONENT.'/helpers');

$app    = JFactory::getApplication();
$params = $this->params;
$total  = 0; // Общая сумма платежа

// добавление javascript и CSS к заголовку документа
JHtml::_('stylesheet', 'components/com_joomlakassa/assets/default.css');
if ($params->get('include_bootstrap', 1) && $params->get('cart_layout', 0)) {
JHtml::_('bootstrap.framework');
JHtml::_('bootstrap.loadcss');
JHtml::_('stylesheet', 'components/com_joomlakassa/assets/bootstrap/css/bootstrap.jk.css');
}
else {
JHtml::_('gswork.jquery');
}

// стиль текста стоимости (Bootstrap)
$classCost = ($params->get('textCostProd', 'text-info'))? $params->get('textCostProd', 'text-info') : 'price';

?>
<div class="jk-cart-items" id="jk">
  <!--ajaxBusy-->
  <span id="jk_ajaxBusy">
    <img src="components/com_joomlakassa/assets/images/loading2.gif">
  </span>
  <table class="table">
    <?php if ($params->get('showCartTbHead', 1)) : ?>
    <thead>
      <tr>
        <th>#</th>
        <th colspan="2"><?php echo JText::_('COM_JOOMLAKASSA_GRID_TITLE')?></th>
        <?php if ($params->get('calculate', 1)) : ?>
        <th style="text-align:center"><?php echo JText::_('COM_JOOMLAKASSA_CART_NUMBER')?></th>
        <?php endif; ?>
        <th style="text-align:center"><?php echo JText::_('COM_JOOMLAKASSA_GRID_COST')?></th>
      </tr>
    </thead>
    <?php endif; ?>
    <tbody id="jkCartProducts">
      <?php
      foreach ($this->cart as $i => $cart) :
      foreach ($this->product as $product) :
      if ($product->id == $cart['id']) :
          // Ссылка на продукт
          $productSlug = $product->alias ? ($product->id.':'.$product->alias) : $product->id;
          $linkProduct  = JRoute::_(JoomlakassaHelperRoute::getProductRoute($productSlug, $product->catid));
          // Сумма платежа
          if ($cart['cost']) {
              $payment_amount = $cart['cost'];
          } else {
              if ($product->discount && $product->amount_discount) $payment_amount = $product->amount_discount; // стоимость со скидкой
              else $payment_amount = $product->payment_amount;  // стоимость
          }
          // Общая сумма платежа
          $total += $payment_amount * $cart['count'];
      ?>
      <tr id="jkItemProd_<?php echo $i ?>">
        <!-- Удалить продукт -->
        <td class="jk-td_del_button">
          <a title="<?php echo JText::_('COM_JOOMLAKASSA_CART_DELETE_TITLE')?>"
              href="#" class="jk-del_button text-error lead" id="jkDel-<?php echo $i ?>">&times;</a>
        </td>
        <!-- Изображение продукта -->
        <td class="jk-prod_image">
          <?php // ИЗОБРАЖЕНИЕ
          if ($product->image && $params->get('show_cart_image', 1)) :
  if ($params->get('imgLinkCartName', 1)) : ?>
          <a href="<?php echo $linkProduct ?>" target="_blank">
            <?php echo JHtml::_('gswork.imgsize', $product->image, $params->get('cart_image_height', 90), $product->name)?>
          </a>
          <?php else :
          echo JHtml::_('gswork.imgsize', $product->image, $params->get('cart_image_height', 90), $product->name);
          endif;
  endif; ?>
        </td>
        <!-- Информация о продукте -->
        <td class="title">
          <?php // ИМЯ ПРОДУКТА ?>
          <<?php echo $this->params->get('titlesProdCart', 'h4')?>>
            <?php
            // имя как ссылка
            if ($params->get('prodLinkCartName', 1)) : ?>
                <a href="<?php echo $linkProduct ?>" target="_blank">
  <?php echo $product->name ?>
                </a>
            <?php else :
                echo $product->name;
            endif;
            // если есть варианты продукта
            if ($cart['text']) : ?>
            <br /><small><?php echo $cart['text'] ?></small>
            <?php endif; ?>
          </<?php echo $this->params->get('titlesProdCart', 'h4')?>>
          <div class="baggage-price jk-unit">
            <?php // Стоимость и скидка ?>
            <span class="<?php echo $classCost ?>">
              <?php echo JHtml::_('gsWork.costDisplay', $payment_amount, false, $this->currency->cours, $this->currency->symbol)?>
            </span>
          </div>
          <div class="baggage-payment_desc jk-unit">
            <?php // Описание платежа
if ($params->get('show_prod_cart_desc', 1)) echo $product->payment_desc; ?>
          </div>
        </td>
        <?php if ($params->get('calculate', 1)) :
    $jkNumButton = ($params->get('increase'))? ' btn-'.$params->get('increase') : ''; ?>
        <!-- Количество -->
        <td class="number" style="text-align:center">
          <input id="jkNumInput_<?php echo $i ?>" class="input-mini" type="text"
          style="text-align:center; width:25px;" value="<?php echo $cart['count'] ?>" /><br />
          <input id="hiddenLimit_<?php echo $i ?>" type="hidden" value="<?php echo $product->limit ?>" />
          <button class="jk-num btn btn-small<?php echo $jkNumButton ?>"
          id="jkNumButton-<?php echo $i ?>" title="<?php echo JText::_('COM_JOOMLAKASSA_CART_RECALCULATE')?>">
            <?php echo JText::_('COM_JOOMLAKASSA_CART_PLUS_MINUS')?>
          </button>
        </td>
        <?php endif; ?>
        <!-- Стоимость -->
        <td class="cost" style="text-align:center">
          <span class="jk-cost lead <?php echo $classCost ?>">
            <span id="jkAmount_<?php echo $i ?>"><?php echo JHtml::_('gsWork.costDisplay', $payment_amount, $cart['count'], $this->currency->cours)?></span><?php echo $this->currency->symbol ?>
            <input id="hiddenAmount_<?php echo $i ?>" type="hidden" value="<?php echo $payment_amount / $this->currency->cours ?>" />
          </span>
        </td>
      </tr>
      <?php
      endif;
      endforeach;
      endforeach;
      ?>
      <tr>
        <td colspan="3">
          <?php
          // Оформить заказ
  $checkoutClass = ($params->get('buy'))? ' btn-'.$params->get('buy') : '';
  $checkoutStyle = '';
  if ($total < $params->get('amount_limit', 0)) {
  $checkoutStyle = 'display:none;';
  $app->enqueueMessage(JText::_('COM_JOOMLAKASSA_AMOUNT_LIMIT_CART').'<br />'.
     JText::sprintf('COM_JOOMLAKASSA_AMOUNT_LIMIT',
      JHtml::_('gsWork.costDisplay', $params->get('amount_limit', 0), false,
     $this->currency->cours, $this->currency->symbol)), 'Notice');
  }
  ?>
          <p>
            <?php
// onClick URL
            $itemId = JRequest::getInt('Itemid');
$onClickUrl = 'index.php?option=com_joomlakassa&view=order&Itemid='.$itemId;
?>
            <button id="jkCheckout" class="btn<?php echo $checkoutClass ?>" type="button"
            style="<?php echo $checkoutStyle ?>"
                onClick="window.open('<?php echo JURI::base().$onClickUrl ?>', '_top')">
              <?php echo JText::_('COM_JOOMLAKASSA_CART_BUY_ALL')?>
            </button>
          </p>
        </td>
        <?php if ($params->get('calculate', 1)) : ?>
        <?php endif; ?>
        <td colspan="2" style="text-align:center">
          <p class="jk-cost lead <?php echo $classCost ?>">
            <span id="jkTotalAmount"><?php echo JHtml::_('gsWork.costDisplay', $total, false, $this->currency->cours)?></span><?php echo $this->currency->symbol ?>
          </p>
        </td>
      </tr>
    </tbody>
  </table>
 
  <?php
  // Связанные продукты
  if ($this->related && $params->get('sum_related_line', 28)) : ?>
  <h3>
    <?php echo JText::_('COM_JOOMLAKASSA_ADD_TO_ORDER')?>
  </h3>
  <ul class="jk-baggage-related">
<?php foreach ($this->related as $related) :
        // Ссылка на продукт
        $relatedSlug = $related->alias ? ($related->id.':'.$related->alias) : $related->id;
        $linkRelated  = JRoute::_(JoomlakassaHelperRoute::getProductRoute($relatedSlug, $related->catid));
        // стоимость
        $relPayment = JHtml::_('gsWork.costDisplay', $related->payment_amount, false, $this->currency->cours, $this->currency->symbol);
        // стоимость со скидкой
        $relDiscount = JHtml::_('gsWork.costDisplay', $related->amount_discount, false, $this->currency->cours, $this->currency->symbol);
        ?>
    <li class="well well-small" style="width: <?php echo $params->get('sum_related_line', 28)?>%">
      <?php
      // изображение
      if ($related->image) {
          echo JHtml::_('gswork.imgsize', $related->image, 50, $related->name);
      }
      // имя
      $nameOverflow = ($params->get('titlesOverflow', 0))?
                       ' overflow: hidden; text-overflow: ellipsis; white-space: nowrap;' : '';
      ?>
      <p style="font-weight:bold;<?php echo $nameOverflow ?>">
        <a href="<?php echo $linkRelated ?>" target="_blank">
  <?php echo $related->name ?>
        </a>
      </p>
      <p class="baggage-price">
        <?php
        // если есть скидка
        if ($related->discount) :
            // стиль текста стоимости (Bootstrap)
            $relClassCost = ($params->get('product_layout') == 'bootstrap' && $params->get('textCostProd','text-info'))? $params->get('textCostProd','text-info') : 'related-new-price';
            $relCost = $related->amount_discount;
            ?>
            <span class="related-old-price" style="text-decoration: line-through;"><?php echo $relPayment ?></span>
            <span class="<?php echo $relClassCost ?>" style="font-weight:bold;"><?php echo $relDiscount ?></span>
        <?php else :
            // стиль текста стоимости (Bootstrap)
            $relClassCost = ($params->get('product_layout') == 'bootstrap' && $params->get('textCostProd','text-info'))? $params->get('textCostProd','text-info') : 'related-price';
            $relCost = $related->payment_amount;
            ?>
            <span class="<?php echo $relClassCost ?>" style="font-weight:bold;"><?php echo $relPayment ?></span>
        <?php endif; ?>
      </p>
      <?php
      // url контролера корзины
  $relatedUrl  = '&amp;product_id='. $related->id;
  $relatedUrl .= '&amp;product_name='. htmlspecialchars($related->name);
  $relatedUrl .= '&amp;product_cost='.$relCost;
  $relatedUrl .= '&amp;return_url='.base64_encode(JFactory::getURI()->toString());
  $cartUrl = JURI::base().'index.php?option=com_joomlakassa&amp;task=cart.addtocart'. $relatedUrl; ?>
      <a href="<?php echo $cartUrl ?>" class="jk-add_button btn btn-mini"><?php echo JText::_('COM_JOOMLAKASSA_ADD')?></a>
    </li>
    <?php endforeach; ?>
  </ul>
  <?php endif; ?>
</div>

<script type="text/javascript">
<!--
jQuery(document).ready(function()
{
// Initialise variables
var decimals   = '<?php echo $params->get('cost_decimals', 2)?>'; // Знаков после запятой
var dec_point   = '<?php echo $params->get('cost_dec_point', '.')?>'; // Разделитель дробной части
var thousands_sep = '<?php echo $params->get('cost_thousands_sep', ' ')?>'; // Разделитель тысяч
if (thousands_sep == '*') var thousands_sep = ''; // Разделитель тысяч без пробела

// Количество продуктов
jQuery("body").on("click", "#jkCartProducts .jk-num", function(e)
{
e.preventDefault();
var num = this.id.split("-");
var numID = num[1];
var numInput = jQuery("#jkNumInput_"+ numID).val(); // Количество
var limit = jQuery("#hiddenLimit_"+ numID).val(); // Мин. кол. для заказа
var hAmount = jQuery("#hiddenAmount_"+ numID).val(); // Стоимость продукта

// Проверить поле кол-во
if(numInput < parseInt(limit)) {
alert("<?php echo JText::_('COM_JOOMLAKASSA_CART_N_LIMIT_X')?> "+ limit);
return false;
}
if(numInput.match(/[^0-9]/g)) {
alert("<?php echo JText::_('COM_JOOMLAKASSA_CART_N_NOT_INCREASE')?>");
return false;
}

// AJAX запрос к cart.amountofproduct
jQuery.ajax({
type: "POST",
url: "<?php echo JURI::base()?>index.php?option=com_joomlakassa&task=cart.amountofproduct",
dataType: "text",
data: { product_n: numID,
product_count: numInput,
cur_cours: <?php echo $this->currency->cours ?>,
cur_symbol: '<?php echo $this->currency->symbol ?>' },
success:function(response)
{
// общая стоимость для одного продукта
amount = hAmount * numInput;

// К функции costFormat
newAmount = costFormat(amount.toString(), decimals, dec_point, thousands_sep);

jQuery("#jkAmount_"+ numID).text(newAmount);

// общая стоимость всех продуктов
var newTotalAmount = jQuery("#jkTotal", response).html();

// К функции costFormat
totalAmount = costFormat(newTotalAmount, decimals, dec_point, thousands_sep);

jQuery("#jkTotalAmount").html(totalAmount).show();

<?php if ($params->get('amount_limit', 0)) : ?>
// Скрыть/Показать кнопку "Оформить заказ" и системное сообщени
// в зависимисти от общей стоимости и лимита платежа
if (newTotalAmount < <?php echo $params->get('amount_limit', 0) / $this->currency->cours ?>) {
jQuery('#jkCheckout').fadeOut("slow");
jQuery('#system-message-container').html(jQuery('#systemMessage', response).html()).show();
} else {
jQuery('#jkCheckout').fadeIn("slow");
jQuery('#system-message-container').fadeOut("slow");
}
<?php endif; ?>
},
error:function (xhr, ajaxOptions, thrownError) {
// выводим ошибку
alert(thrownError);
}
});
});

// Удалить продукт
jQuery("body").on("click", "#jkCartProducts .jk-del_button", function(e)
{
e.preventDefault();
var clickedID = this.id.split("-");
var cartNumber = clickedID[1];

// AJAX запрос к cart.removedfromcart
jQuery.ajax({
type: "POST",
url: "<?php echo JURI::base()?>index.php?option=com_joomlakassa&task=cart.removedfromcart",
dataType: "text",
data: { cartToDelete: cartNumber,
cur_cours: <?php echo $this->currency->cours ?>,
cur_symbol: '<?php echo $this->currency->symbol ?>' },
success:function(response)
{
// скрыть выбранный пользователем для удаления, элемент
jQuery('#jkItemProd_'+cartNumber).fadeOut("slow");

// общая стоимость всех продуктов
var newTotalAmount = jQuery("#jkTotal", response).html();
if (newTotalAmount != '0') {
// К функции costFormat
newAmount = costFormat(newTotalAmount, decimals, dec_point, thousands_sep);
}
else {
newAmount = 0;
}
jQuery("#jkTotalAmount").html(newAmount).show();

<?php if ($params->get('amount_limit', 0)) : ?>
// Скрыть/Показать кнопку "Оформить заказ" и системное сообщени
// в зависимисти от общей стоимости и лимита платежа
if (newTotalAmount < <?php echo $params->get('amount_limit', 0) / $this->currency->cours ?>) {
jQuery('#jkCheckout').fadeOut("slow");
jQuery('#system-message-container').html(jQuery('#systemMessage', response).html()).show();
} else {
jQuery('#jkCheckout').fadeIn("slow");
jQuery('#system-message-container').fadeOut("slow");
}
<?php else : ?>
if (newTotalAmount == '0') {
jQuery('#jkCheckout').fadeOut("slow");
}
<?php endif; ?>
},
error:function (xhr, ajaxOptions, thrownError) {
alert(thrownError); // выводим ошибку
}
});
});

// CSS для ajaxBusy
jQuery('#jk_ajaxBusy').css({
display: "none"
});

// Скрыть/Показать изображение процесса загрузки
jQuery(document).ajaxStart(function(){
  jQuery('#jk_ajaxBusy').show();
}).ajaxStop(function(){
  jQuery('#jk_ajaxBusy').hide();
});
});
 

/**
* Разделить стоимость по разрядам
*
* cost Стоимость
* decimals Знаков после запятой
* point Разделитель дробной части
* separator Разделитель тысяч
*/
function costFormat(cost, decimals, point, separator)
{
if(!isNaN(cost))
{
point = point ? point : '.';
cost = cost.split('.');
if(separator)
{
var tmp_cost = new Array();
for(var i = cost[0].length, j = 0; i > 0; i -= 3)
{
var pos = i > 0 ? i - 3 : i;
tmp_cost[j++] = cost[0].substring(i, pos);
}
cost[0] = tmp_cost.reverse().join(separator);
}
if(decimals && cost[1])
cost[1] = Math.round(parseFloat(cost[1].substr(0, decimals) + '.' + cost[1].substr(decimals, cost[1].length), 10));
return(cost.join(point));
}
else return(null);
}
//-->
</script>
В некоторых случаях с других мест выходят ошибки (on line 393, on line 45)
На локальном сервере все отлично, на УРА работает, как перевел на хостинг вылезли эти ошибки.
*

aldabergenovb

  • Новичок
  • 3
  • 0 / 0
ну подскажите хотябы кто нибудь?
*

arma

  • Завсегдатай
  • 1752
  • 81 / 3
JoomlaKassa - платный компонент. Почему бы не спросить у продавца, а не в разделе "общие вопросы Joomla"?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Ошибка на сайте: Warning: session_start() [function.session-start]: Cannot send session cookie - hea

Автор sapravka

Ответов: 6
Просмотров: 3691
Последний ответ 08.10.2016, 14:53:19
от SeBun
Error:invalid login

Автор abuamr

Ответов: 4
Просмотров: 8004
Последний ответ 02.12.2015, 16:16:58
от stardel
Warning: Failed to move file! Unable to upload file

Автор sonics

Ответов: 2
Просмотров: 1796
Последний ответ 26.10.2015, 17:07:17
от sonics
Ошибка "Warning: Creating default object from empty value in"

Автор leito

Ответов: 13
Просмотров: 25897
Последний ответ 08.06.2015, 19:53:01
от Dipsena
Изменить Зависимые выпадающие списки select

Автор mirbekula

Ответов: 0
Просмотров: 1362
Последний ответ 20.02.2015, 07:23:00
от mirbekula