Новости Joomla

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

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

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

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

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

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

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

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

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

Обработка HTTP ответа в Joomla 6+. Изменения по сравнению с Joomla 3 - Joomla 5

👩‍💻 Обработка HTTP ответа в Joomla 6+. Изменения по сравнению с Joomla 3 - Joomla 5.В Joomla для выполнения внешних запросов из PHP к сторонним API используется класс Joomla\Http\Http напрямую или же Joomla\Http\HttpFactory, который возвращает для работы преднастроенный по умолчанию класс Http. О работе с HTTP-запросами подробно рассказывалось в статье 2021 года Создание внешних запросов с использованием HttpFactory (Joomla). Некоторые изменения касаются работы с ответами на запросы. Например, наш запрос:
use Joomla\Http\HttpFactory;$http = (new HttpFactory)->getHttp($options, ['curl', 'stream']);$response = $http->get('https://any-url.ru/api/any/endpoint');
Раньше можно было получить код ответа или тело ответа как свойство $response - $response->code или $response->body. Однако, Joomla, начиная с Joomla 4 во многом переходит на стандарты PSR. В частности для работы с HTTP-ответами - на PSR-7. Также хорошая статья на Хабре о PSR-7: PSR-7 в примерах.
Прямое обращение к свойствам code, headers, body объявлено устаревшим в Joomla 6.0.0 и обещают удалить в Joomla 7.0.0.
Вместо этого нужно работать с HTTP-ответом по стандартам PSR-7. Код ответа.Было $response->code. Стало $response->getStatusCode().Заголовки ответа.Было $response->headers. Стало $response->getHeaders().Тело ответа.Было $response->body. Стало (string)$response->getContents().В тело ответа теперь приходит не строка, а поток - объект класса Laminas\Diactoros\Stream. Поэтому его нужно привести к строке (если это json, к примеру): (string)$response->getContents(). Чаще всего в коде Joomla встречается именно такой вариант. Однако, есть и вариант с перемещением указателя чтения на начало потока:
// Получили ответ в виде потока$stream = $response->getBody();// "перемотали" на начало$stream->rewind();// Получили строковый ответ$json = $stream->getContents();
В итоге результат одинаковый.@joomlafeed#joomla #разработка #php

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

Grandmaster

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
Здравствуйте!

В настройках категории в VirtueMart 2 есть возможность добавлять изображение, причем несколько, но выводиться на сайте только одна картинка, которая в настройках идет на первом месте. В шаблоне за вывод этой первой картинки отвечает код:

Код
$this->category->images[0]->displayMediaFull ("", FALSE);

Вопрос в том, можно ли вывести отдельно и вторую картинку? Заранее спасибо откликнувшимся.
« Последнее редактирование: 30.09.2015, 08:36:13 от Grandmaster »
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
судя логически images[0] - это первая картинка, значит images[1] - это уже будет вторая картинка
Значит с помощью for надо менять значение в квадратных скобках что бы выводились все картинки...
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

Grandmaster

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
все правильно, я так и зделал, например вместо 0 написал 1, в результате белый экран
*

jetjetjet

  • Осваиваюсь на форуме
  • 46
  • 2 / 0
Здравствуйте!

В настройках категории в VirtueMart 2 есть возможность добавлять изображение, причем несколько, но выводиться на сайте только одна картинка, которая в настройках идет на первом месте. В шаблоне за вывод этой первой картинки отвечает код:

Код
$this->category->images[0]->displayMediaFull ("", FALSE);

Вопрос в том, можно ли вывести отдельно и вторую картинку? Заранее спасибо откликнувшимся.


Полный код страницы дайте
*

Grandmaster

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
Код
<?php
//vmdebug('$this->category',$this->category);
//vmdebug ('$this->category ' . $this->category->category_name);
// Check to ensure this file is included in Joomla!
defined ('_JEXEC') or die('Restricted access');
$db = JFactory::getDbo();
JHTML::_ ('behavior.modal');
/* javascript for list Slide
  Only here for the order list
  can be changed by the template maker

$js = "
jQuery(document).ready(function () {
jQuery('.orderlistcontainer').hover(
function() { jQuery(this).find('.orderlist').stop().show()},
function() { jQuery(this).find('.orderlist').stop().hide()}
)
});
";
*/
/*$js = "
jQuery(document).ready(function () {
jQuery('.categoryChild p img').remove()
});
";*/
$document = JFactory::getDocument ();
$document->addScriptDeclaration ($js);?>

{modulepos kerastase}
<h1 style="font-size: 28px; line-height: 28px;  margin: 16px 16px 0px 16px; text-transform: uppercase;"><?php echo $this->category->category_name; ?></h1>
<?php
if (empty($this->keyword) and !empty($this->category)) {
?>
    <?php
if (!empty($this->category->category_description) and VmConfig::get('show_category_desc', 1)) { ?>
    <div class="category_description">
    <?php echo $this->category->images[0]->displayMediaFull ("", FALSE);//вывод полной картинки?>
    <?php //echo $this->category->category_description; ?>
    {modulepos catdesc}
    </div>
<?php } ?>

<?php }?>
<?php
if (VmConfig::get ('showCategory', 1) and empty($this->keyword)) {
//echo "";
if (!empty($this->category->haschildren)) {

// Category and Columns Counter
$iCol = 1;
$iCategory = 1;

// Calculating Categories Per Row
$categories_per_row = VmConfig::get ('categories_per_row', 3);
$category_cellwidth = ' width' . floor (100 / $categories_per_row);

// Separator
$verticalseparator = " vertical-separator";
?>
<div class="categoriesView" style="background:none">

<div class="categories">

<?php // Start the Output
if (!empty($this->category->children)) {

foreach ($this->category->children as $category) {

// this is an indicator wether a row needs to be opened or not
if ($iCol == 1) {
?>
<div class="row">
<?php
}

// Category Link
$caturl = JRoute::_ ('index.php?option=com_virtuemart&view=category&virtuemart_category_id=' . $category->virtuemart_category_id, FALSE);

// Show Category
?>
<div class="categoryChild">
<a href="<?php echo $caturl ?>" class="linkBrow" title="<?php echo $category->category_name ?>">
<h2><?php echo $category->category_name ?></h2>
<?php echo $category->images[0]->displayMediaThumb ("", FALSE); ?>
</a>
<p><?php echo $category->category_description; ?></p>
</div>
<?php
$iCategory++;

// Do we need to close the current row now?
if ($iCol == $categories_per_row) {
?>
</div>
<?php
$iCol = 1;
} else {
$iCol++;
}
}
}
// Do we need a final closing row tag?
if ($iCol != 1) {
?>
</div>
<?php } ?>
</div>
<?php
echo "</div>";
}

}
?>

<div id="browse-view">
<?php

if (!empty($this->keyword)) {
?>
<p style="margin-top: 16px;"><?php echo 'Вы искали: "'.$this->keyword.'"'; ?></p>
<?php
} ?>
<?php if ($this->search !== NULL) {
$category_id  = JRequest::getInt ('virtuemart_category_id', 0); ?>
<!-- End Search Box -->
<?php } ?>

<?php // Show child categories
if (!empty($this->products)) {
?>

<div class="orderby-displaynumber">
    <div style="float: left">
<?php echo $this->vmPagination->getResultsCounter ();?>
    </div>
    <div style="float: right;width: 88px;">
    <?php echo $this->vmPagination->getLimitBox ($this->category->limit_list_step); ?>
    </div>
</div>
<?php
// Category and Columns Counter
$iBrowseCol = 1;
$iBrowseProduct = 1;
// Calculating Products Per Row
$BrowseProducts_per_row = $this->perRow;
$Browsecellwidth = ' width' . floor (100 / $BrowseProducts_per_row);
$BrowseTotalProducts = count($this->products);
// Start the Output
foreach ($this->products as $product) {
        $n = '';
        $this->product = $product;
// this is an indicator wether a row needs to be opened or not
if ($iBrowseCol == 1) {
?>
<div class="row">
<?php
}
// Show Products
?>
       
<div class="product">
<a class="productImg" title="<?php echo $product->product_name ?>" alt="<?php echo $product->product_name ?>" rel="vm-additional-images" href="<?php echo $product->link; ?>">
<h2><?php echo $product->product_name;?></h2>
<?php
                echo $product->images[0]->displayMediaThumb('class="browseProductImage"', false);
                ?>
</a>
                <?php $_SESSION['badges_in_use']=true ?>
                <div style="display:none;" id="<?php echo $product->virtuemart_product_id ?>_bvmpb_mod" class="product_badge"></div>
           
            <?php /*if($product->customfields[0]->virtuemart_custom_id == 21||$product->customfields[0]->virtuemart_custom_id == 22||$product->customfields[0]->virtuemart_custom_id == 23){
                   echo '<div class="sticker '.$product->customfields[0]->display.'"></div>';
                }*/?>
            <?php
            if ($this->show_prices == '1') {
                if (round($product->prices['basePriceWithTax'],$this->currency->_priceConfig['salesPrice'][1])!= $product->prices['salesPrice']) {
                                $n = '';
}else{
                    $n = 'marginTop2';
                }
            }?>
<div class="product-price <?php echo $n;?>">
<?php
if ($this->show_prices == '1') {
if ($product->prices['salesPrice']<=0 and VmConfig::get ('askprice', 1) and  !$product->images[0]->file_is_downloadable) {
echo JText::_ ('COM_VIRTUEMART_PRODUCT_ASKPRICE');
}
//todo add config settings
if (round($product->prices['basePriceWithTax'],$this->currency->_priceConfig['salesPrice'][1])!= $product->prices['salesPrice']) {
                                $n = '';
echo '<div class="price-crossed" >' . $this->currency->createPriceDiv ('basePriceWithTax', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX', $product->prices). "</div>";
}
echo $this->currency->createPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $product->prices);
} ?>
</div>
            <div class="addToCart">
                        <?php
                        if ($this->product->virtuemart_manufacturer_id != 15&&$this->product->virtuemart_manufacturer_id != 13) {
                            echo $this->loadTemplate('addtocart');
                            }else{
                            echo "<p style='color: #6f5d45;text-align: center;font-size: 13.33px;text-transform: uppercase;line-height: 16px;'>Продаётся в салоне!</p>";
                            }
                        ?>
            </div>
</div> <!-- end of product -->

<?php
// Do we need to close the current row now?
if ($iBrowseCol == $BrowseProducts_per_row || $iBrowseProduct == $BrowseTotalProducts)       {?>
    </div> <!-- end of row -->
<?php
$iBrowseCol = 1;
} else {
$iBrowseCol++;
}
$iBrowseProduct++;
} // end of foreach ( $this->products as $product )
// Do we need a final closing row tag?
if ($iBrowseCol != 1) {
?>
<?php
}
?>
<div class="vm-pagination">
<?php echo $this->vmPagination->getPagesLinks (); ?>
</div>
<?php
} elseif ($this->search !== NULL) {
    echo '</br>';
echo JText::_ ('COM_VIRTUEMART_NO_RESULT');
}
?>
</div>
<!-- end browse-view -->
*

Aponte

  • Захожу иногда
  • 122
  • 3 / 3
На странице категории доступна только одна фотография (images[0]), даже если у категории их несколько
*

Aponte

  • Захожу иногда
  • 122
  • 3 / 3
ссылка на варезник

Это изображения товара, а не категории
« Последнее редактирование: 29.09.2015, 23:46:20 от fsv »
*

Grandmaster

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
На странице категории доступна только одна фотография (images[0]), даже если у категории их несколько

Что ж если не возможно вывести другие картинки, тогда буду придумывать что то другое, проблема не решена но думаю тему можно закрыть
*

Aponte

  • Захожу иногда
  • 122
  • 3 / 3
Что ж если не возможно вывести другие картинки, тогда буду придумывать что то другое, проблема не решена но думаю тему можно закрыть

Вывести то можно, но не просто 0 на 1 поменяв.
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Что ж если не возможно вывести другие картинки, тогда буду придумывать что то другое, проблема не решена но думаю тему можно закрыть

Оказывается что есть решение данной проблемы. Нашел на сайте Вывод нескольких изображений категории вместо одной в VirtueMart v3.0.10
Сам скачал и все сработало так как описано в PDF файле.
скачай может поможет......
« Последнее редактирование: 09.10.2015, 02:10:10 от NewUsers »
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

Grandmaster

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
Ссылка битая
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться