Новости 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 Ответов
  • 2553 Просмотров
*

joomla-mla

  • Осваиваюсь на форуме
  • 19
  • 0 / 0
ошибки пагинации
« : 17.09.2009, 11:16:05 »
Не прошло и года... откопал вроде бы файл, который отвечает за построение списка новостей на страницах. Но по-прежнему не могу понять, ГДЕ в нем ошибка, из-за которой страницы, при выборе месяца, выводятся неправильно (точнее, выводится х.з. что).

http://www.almrally.ru/news-archive?start=20 (правильная пагинация без предв. выбора месяца);
http://www.almrally.ru/news-archive/2009/9?start=10 (неправильная пагинация с выбором месяца - сентябрь, стр. 2; как есть сейчас);
http://www.almrally.ru/news-archive?year=2009&month=9&start=10 (правильная пагинация с выбором месяца - сентябрь, стр. 2; так, как, по идее, должно быть).

Код файла pagination.php:

Код
<?php
/**
 * @version $Id: pagination.php 10707 2008-08-21 09:52:47Z eddieajau $
 * @package Joomla.Framework
 * @subpackage HTML
 * @copyright Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.
 * @license GNU/GPL, see LICENSE.php
 * Joomla! is free software. This version may have been modified pursuant
 * to the GNU General Public License, and as distributed it includes or
 * is derivative of works licensed under the GNU General Public License or
 * other free or open source software licenses.
 * See COPYRIGHT.php for copyright notices and details.
 */

// Check to ensure this file is within the rest of the framework
defined('JPATH_BASE') or die();

/**
 * Pagination Class.  Provides a common interface for content pagination for the
 * Joomla! Framework
 *
 * @package Joomla.Framework
 * @subpackage HTML
 * @since 1.5
 */
class JPagination extends JObject
{
/**
* The record number to start dislpaying from
*
* @access public
* @var int
*/
var $limitstart = null;

/**
* Number of rows to display per page
*
* @access public
* @var int
*/
var $limit = null;

/**
* Total number of rows
*
* @access public
* @var int
*/
var $total = null;

/**
* View all flag
*
* @access protected
* @var boolean
*/
var $_viewall = false;

/**
* Constructor
*
* @param int The total number of items
* @param int The offset of the item to start at
* @param int The number of items to display per page
*/
function __construct($total, $limitstart, $limit)
{
// Value/Type checking
$this->total = (int) $total;
$this->limitstart = (int) max($limitstart, 0);
$this->limit = (int) max($limit, 0);

if ($this->limit > $this->total) {
$this->limitstart = 0;
}

if (!$this->limit)
{
$this->limit = $total;
$this->limitstart = 0;
}

if ($this->limitstart > $this->total) {
$this->limitstart -= $this->limitstart % $this->limit;
}

// Set the total pages and current page values
if($this->limit > 0)
{
$this->set( 'pages.total', ceil($this->total / $this->limit));
$this->set( 'pages.current', ceil(($this->limitstart + 1) / $this->limit));
}

// Set the pagination iteration loop values
$displayedPages = 10;
$this->set( 'pages.start', (floor(($this->get('pages.current') -1) / $displayedPages)) * $displayedPages +1);
if ($this->get('pages.start') + $displayedPages -1 < $this->get('pages.total')) {
$this->set( 'pages.stop', $this->get('pages.start') + $displayedPages -1);
} else {
$this->set( 'pages.stop', $this->get('pages.total'));
}

// If we are viewing all records set the view all flag to true
if ($this->limit == $total) {
$this->_viewall = true;
}
}

/**
* Return the rationalised offset for a row with a given index.
*
* @access public
* @param int $index The row index
* @return int Rationalised offset for a row with a given index
* @since 1.5
*/
function getRowOffset($index)
{
return $index +1 + $this->limitstart;
}

/**
* Return the pagination data object, only creating it if it doesn't already exist
*
* @access public
* @return object Pagination data object
* @since 1.5
*/
function getData()
{
static $data;
if (!is_object($data)) {
$data = $this->_buildDataObject();
}
return $data;
}

/**
* Create and return the pagination pages counter string, ie. Page 2 of 4
*
* @access public
* @return string Pagination pages counter string
* @since 1.5
*/
function getPagesCounter()
{
// Initialize variables
$html = null;
if ($this->get('pages.total') > 1) {
$html .= JText::_('Page')." ".$this->get('pages.current')." ".JText::_('of')." ".$this->get('pages.total');
}
return $html;
}

/**
* Create and return the pagination result set counter string, ie. Results 1-10 of 42
*
* @access public
* @return string Pagination result set counter string
* @since 1.5
*/
function getResultsCounter()
{
// Initialize variables
$html = null;
$fromResult = $this->limitstart + 1;

// If the limit is reached before the end of the list
if ($this->limitstart + $this->limit < $this->total) {
$toResult = $this->limitstart + $this->limit;
} else {
$toResult = $this->total;
}

// If there are results found
if ($this->total > 0) {
$msg = JText::sprintf('Results of', $fromResult, $toResult, $this->total);
$html .= "\n".$msg;
} else {
$html .= "\n".JText::_('No records found');
}

return $html;
}

/**
* Create and return the pagination page list string, ie. Previous, Next, 1 2 3 ... x
*
* @access public
* @return string Pagination page list string
* @since 1.0
*/
function getPagesLinks()
{
global $mainframe;

$lang =& JFactory::getLanguage();

// Build the page navigation list
$data = $this->_buildDataObject();

$list = array();

$itemOverride = false;
$listOverride = false;

$chromePath = JPATH_THEMES.DS.$mainframe->getTemplate().DS.'html'.DS.'pagination.php';
if (file_exists($chromePath))
{
require_once ($chromePath);
if (function_exists('pagination_item_active') && function_exists('pagination_item_inactive')) {
$itemOverride = true;
}
if (function_exists('pagination_list_render')) {
$listOverride = true;
}
}

// Build the select list
if ($data->all->base !== null) {
$list['all']['active'] = true;
$list['all']['data'] = ($itemOverride)? pagination_item_active($data->all) : $this->_item_active($data->all);
} else {
$list['all']['active'] = false;
$list['all']['data'] = ($itemOverride)? pagination_item_inactive($data->all) : $this->_item_inactive($data->all);
}

if ($data->start->base !== null) {
$list['start']['active'] = true;
$list['start']['data'] = ($itemOverride)? pagination_item_active($data->start) : $this->_item_active($data->start);
} else {
$list['start']['active'] = false;
$list['start']['data'] = ($itemOverride)? pagination_item_inactive($data->start) : $this->_item_inactive($data->start);
}
if ($data->previous->base !== null) {
$list['previous']['active'] = true;
$list['previous']['data'] = ($itemOverride)? pagination_item_active($data->previous) : $this->_item_active($data->previous);
} else {
$list['previous']['active'] = false;
$list['previous']['data'] = ($itemOverride)? pagination_item_inactive($data->previous) : $this->_item_inactive($data->previous);
}

$list['pages'] = array(); //make sure it exists
foreach ($data->pages as $i => $page)
{
if ($page->base !== null) {
$list['pages'][$i]['active'] = true;
$list['pages'][$i]['data'] = ($itemOverride)? pagination_item_active($page) : $this->_item_active($page);
} else {
$list['pages'][$i]['active'] = false;
$list['pages'][$i]['data'] = ($itemOverride)? pagination_item_inactive($page) : $this->_item_inactive($page);
}
}

if ($data->next->base !== null) {
$list['next']['active'] = true;
$list['next']['data'] = ($itemOverride)? pagination_item_active($data->next) : $this->_item_active($data->next);
} else {
$list['next']['active'] = false;
$list['next']['data'] = ($itemOverride)? pagination_item_inactive($data->next) : $this->_item_inactive($data->next);
}
if ($data->end->base !== null) {
$list['end']['active'] = true;
$list['end']['data'] = ($itemOverride)? pagination_item_active($data->end) : $this->_item_active($data->end);
} else {
$list['end']['active'] = false;
$list['end']['data'] = ($itemOverride)? pagination_item_inactive($data->end) : $this->_item_inactive($data->end);
}

if($this->total > $this->limit){
return ($listOverride)? pagination_list_render($list) : $this->_list_render($list);
}
else{
return '';
}
}

/**
* Return the pagination footer
*
* @access public
* @return string Pagination footer
* @since 1.0
*/
function getListFooter()
{
global $mainframe;

$list = array();
$list['limit'] = $this->limit;
$list['limitstart'] = $this->limitstart;
$list['total'] = $this->total;
$list['limitfield'] = $this->getLimitBox();
$list['pagescounter'] = $this->getPagesCounter();
$list['pageslinks'] = $this->getPagesLinks();

$chromePath = JPATH_THEMES.DS.$mainframe->getTemplate().DS.'html'.DS.'pagination.php';
if (file_exists( $chromePath ))
{
require_once( $chromePath );
if (function_exists( 'pagination_list_footer' )) {
return pagination_list_footer( $list );
}
}
return $this->_list_footer($list);
}

/**
* Creates a dropdown box for selecting how many records to show per page
*
* @access public
* @return string The HTML for the limit # input box
* @since 1.0
*/
function getLimitBox()
{
global $mainframe;

// Initialize variables
$limits = array ();

// Make the option list
for ($i = 5; $i <= 30; $i += 5) {
$limits[] = JHTML::_('select.option', "$i");
}
$limits[] = JHTML::_('select.option', '50');
$limits[] = JHTML::_('select.option', '100');
$limits[] = JHTML::_('select.option', '0', JText::_('all'));

$selected = $this->_viewall ? 0 : $this->limit;

// Build the select list
if ($mainframe->isAdmin()) {
$html = JHTML::_('select.genericlist',  $limits, 'limit', 'class="inputbox" size="1" onchange="submitform();"', 'value', 'text', $selected);
} else {
$html = JHTML::_('select.genericlist',  $limits, 'limit', 'class="inputbox" size="1" onchange="this.form.submit()"', 'value', 'text', $selected);
}
return $html;
}

/**
* Return the icon to move an item UP
*
* @access public
* @param int $i The row index
* @param boolean $condition True to show the icon
* @param string $task The task to fire
* @param string $alt The image alternate text string
* @return string Either the icon to move an item up or a space
* @since 1.0
*/
function orderUpIcon($i, $condition = true, $task = 'orderup', $alt = 'Move Up', $enabled = true)
{
$alt = JText::_($alt);

$html = '&nbsp;';
if (($i > 0 || ($i + $this->limitstart > 0)) && $condition)
{
if($enabled) {
$html = '<a href="#reorder" onclick="return listItemTask(\'cb'.$i.'\',\''.$task.'\')" title="'.$alt.'">';
$html .= '   <img src="images/uparrow.png" width="16" height="16" border="0" alt="'.$alt.'" />';
$html .= '</a>';
} else {
$html = '<img src="images/uparrow0.png" width="16" height="16" border="0" alt="'.$alt.'" />';
}
}

return $html;
}

/**
* Return the icon to move an item DOWN
*
* @access public
* @param int $i The row index
* @param int $n The number of items in the list
* @param boolean $condition True to show the icon
* @param string $task The task to fire
* @param string $alt The image alternate text string
* @return string Either the icon to move an item down or a space
* @since 1.0
*/
function orderDownIcon($i, $n, $condition = true, $task = 'orderdown', $alt = 'Move Down', $enabled = true)
{
$alt = JText::_($alt);

$html = '&nbsp;';
if (($i < $n -1 || $i + $this->limitstart < $this->total - 1) && $condition)
{
if($enabled) {
$html = '<a href="#reorder" onclick="return listItemTask(\'cb'.$i.'\',\''.$task.'\')" title="'.$alt.'">';
$html .= '  <img src="images/downarrow.png" width="16" height="16" border="0" alt="'.$alt.'" />';
$html .= '</a>';
} else {
$html = '<img src="images/downarrow0.png" width="16" height="16" border="0" alt="'.$alt.'" />';
}
}

return $html;
}

function _list_footer($list)
{
// Initialize variables
$html = "<div class=\"list-footer\">\n";

$html .= "\n<div class=\"limit\">".JText::_('Display Num').$list['limitfield']."</div>";
$html .= $list['pageslinks'];
$html .= "\n<div class=\"counter\">".$list['pagescounter']."</div>";

$html .= "\n<input type=\"hidden\" name=\"limitstart\" value=\"".$list['limitstart']."\" />";
$html .= "\n</div>";

return $html;
}

function _list_render($list)
{
// Initialize variables
$html = null;

// Reverse output rendering for right-to-left display
$html .= '&lt;&lt; ';
$html .= $list['start']['data'];
$html .= ' &lt; ';
$html .= $list['previous']['data'];
foreach( $list['pages'] as $page ) {
$html .= ' '.$page['data'];
}
$html .= ' '. $list['next']['data'];
$html .= ' &gt;';
$html .= ' '. $list['end']['data'];
$html .= ' &gt;&gt;';

return $html;
}

function _item_active(&$item)
{
global $mainframe;
if ($mainframe->isAdmin())
{
if($item->base>0)
return "<a title=\"".$item->text."\" onclick=\"javascript: document.adminForm.limitstart.value=".$item->base."; submitform();return false;\">".$item->text."</a>";
else
return "<a title=\"".$item->text."\" onclick=\"javascript: document.adminForm.limitstart.value=0; submitform();return false;\">".$item->text."</a>";
} else {
return "<a title=\"".$item->text."\" href=\"".$item->link."\" class=\"pagenav\">".$item->text."</a>";
}
}

function _item_inactive(&$item)
{
global $mainframe;
if ($mainframe->isAdmin()) {
return "<span>".$item->text."</span>";
} else {
return "<span class=\"pagenav\">".$item->text."</span>";
}
}

/**
* Create and return the pagination data object
*
* @access public
* @return object Pagination data object
* @since 1.5
*/
function _buildDataObject()
{
// Initialize variables
$data = new stdClass();

$data->all = new JPaginationObject(JText::_('View All'));
if (!$this->_viewall) {
$data->all->base = '0';
$data->all->link = JRoute::_("&limitstart=");
}

// Set the start and previous data objects
$data->start = new JPaginationObject(JText::_('Start'));
$data->previous = new JPaginationObject(JText::_('Prev'));

if ($this->get('pages.current') > 1)
{
$page = ($this->get('pages.current') -2) * $this->limit;

$page = $page == 0 ? '' : $page; //set the empty for removal from route

$data->start->base = '0';
$data->start->link = JRoute::_("&limitstart=");
$data->previous->base = $page;
$data->previous->link = JRoute::_("&limitstart=".$page);
}

// Set the next and end data objects
$data->next = new JPaginationObject(JText::_('Next'));
$data->end = new JPaginationObject(JText::_('End'));

if ($this->get('pages.current') < $this->get('pages.total'))
{
$next = $this->get('pages.current') * $this->limit;
$end  = ($this->get('pages.total') -1) * $this->limit;

$data->next->base = $next;
$data->next->link = JRoute::_("&limitstart=".$next);
$data->end->base = $end;
$data->end->link = JRoute::_("&limitstart=".$end);
}

$data->pages = array();
$stop = $this->get('pages.stop');
for ($i = $this->get('pages.start'); $i <= $stop; $i ++)
{
$offset = ($i -1) * $this->limit;

$offset = $offset == 0 ? '' : $offset;  //set the empty for removal from route

$data->pages[$i] = new JPaginationObject($i);
if ($i != $this->get('pages.current') || $this->_viewall)
{
$data->pages[$i]->base = $offset;
$data->pages[$i]->link = JRoute::_("&limitstart=".$offset);
}
}
return $data;
}
}

/**
 * Pagination object representing a particular item in the pagination lists
 *
 * @package Joomla.Framework
 * @subpackage HTML
 * @since 1.5
 */
class JPaginationObject extends JObject
{
var $text;
var $base;
var $link;

function __construct($text, $base=null, $link=null)
{
$this->text = $text;
$this->base = $base;
$this->link = $link;
}
}

Кто что думает по этому поводу?
*

simpolmix

  • Захожу иногда
  • 141
  • 4 / 0
Re: ошибки пагинации
« Ответ #1 : 20.09.2009, 19:08:52 »
А ты не пробовал SQL запрос менять, как по мне так проблема скорее всего в нем, а не в навигации, навигация отобразает все данные полученные из запроса.
*

joomla-mla

  • Осваиваюсь на форуме
  • 19
  • 0 / 0
Re: ошибки пагинации
« Ответ #2 : 21.09.2009, 09:02:18 »
 ^-^ спасибо - разобрались. Был такой файл - router.php, надо было в нем закомментировать пару абзацев.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Ошибки кодировки после обновления БД

Автор JohnGonzo

Ответов: 2
Просмотров: 2158
Последний ответ 12.04.2016, 09:11:03
от JohnGonzo
Формат Url для пагинации

Автор orkanos

Ответов: 1
Просмотров: 1454
Последний ответ 06.09.2015, 15:20:32
от darkghost
Ошибки на сайте. Прошу помощи

Автор SenyaKulia

Ответов: 14
Просмотров: 4651
Последний ответ 15.06.2014, 10:54:09
от kirin
Белый экран. Ошибки в админке. Не работает сайт

Автор Малышка

Ответов: 10
Просмотров: 2567
Последний ответ 25.05.2014, 11:23:17
от altvvc
Не устанавливаются компоненты. Ошибки JFTP::chmod: Bad response

Автор xxx87

Ответов: 5
Просмотров: 4304
Последний ответ 12.07.2013, 03:25:26
от Olesea