Новости Joomla

Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях

Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях

👩‍💻 Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях. На старте его сайт на Joomla 3 вообще не смог обновиться на Joomla 5. Пришлось делать экспорт/импорт материалов. Проделав всё это он запустил-таки этот объём данных на Joomla 5. Тестовый скрипт грузил 200 материалов из этого объёма всего за 94 секунды ))) А главная страница с категориями грузилась 20 секунд. Добавив индекс для таблицы #__content

CREATE INDEX idx_catid_state ON #__content (catid, state);
он сократил время загрузки категорий до 1 секунды. Затем наш герой решил поковырять SQL-запрос в ArticleModel, который отвечает за выборку материалов. И решил заменить тип JOIN на STRAIGHT_JOIN для категорий.
// ->from($db->quoteName('#__content', 'a'))->from(    $db->quoteName('#__content', 'a')    . ' STRAIGHT_JOIN ' . $db->quoteName('#__categories', 'c')    . ' ON ' . $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid'))// ->join('LEFT', $db->quoteName('#__categories', 'c'), $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid'))
Что сократило загрузку 200 материалов из 150к с 94 секунд до 5. К слову сказать, боевой сайт на Joomla 3 крутится на 12CPU 64GB рамы. А все манипуляции с кодом он делает на базовом 1CPU 1GB сервере и замеры скорости даны именно для базового сервера. Но это всё в дискуссии, хотя в идеале должно вылиться в Pull Requests. Мы - Open Source сообщество, где никто никому ничего не должен. Джунгли. Но человек ищет пути оптимизации Joomla и предлагает решения. Если оказать поддержку и предложить помощь хотя бы с тестированием самых разнообразных сценариев, то возможно эти улучшения смогут войти в ядро. Пусть не быстро, пусть через несколько лет, пусть не все, но войдут. Достаточно предложить руку помощи и приложить немного усилий.
Дискуссию на GitHub можно почитать здесь.@joomlafeed#joomla #community #php

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

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

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

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

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

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

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

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

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

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

pantela

  • Захожу иногда
  • 257
  • 1 / 0
Проблема с IE
« : 12.08.2010, 04:12:11 »
Eсть самописный комопнет под 1.5.x. комопнент доски объявления. всё хорошо работате, вот только.

при заполнени формы для объявления там есть фозможноть загрузит фото, так вот в OPERA и в FF фото грузится и на сервер передаётся файлы и в базе в поле объявления прописывается имя фото.
А вот если через IE подавать объявения, тогда ни фото не переаётся на сервер (файл) ни в базу не идёт запрос на поле фото... - а объявления просто добавляется без фото

Вчём по ваему может быть причина . -

Мне говрили что JS возожно, но я вроде отключила всё JS файлы которые подключались, но смысла не было.

Думаю проблема в функции т.к. IE  гулчит с функциями по сравнению с OPER и FF.


\components\com_ads\views\as_adsaddsrv\tmpl\default.php
Код
<?php

defined('_JEXEC') or die( 'Restricted access' );

$model = $this->model;

?>

<form name="ads_addsrv" onsubmit="return validForm();" action="index.php?option=com_as_ads" method="post" enctype="multipart/form-data">
<table cellspacing="0" cellpadding="0" border="0" class="ads_add">
<tbody>
<tr>
<td><small><font color="red">*</font></small> Доп инфо</td>
<td nowrap="nowrap">
<textarea name="dop_info" cols="50" rows="6" class="inputbox"></textarea>
</td>
</tr>
<tr>
<td nowrap="nowrap">Фото</td>
<td>
<input type="file" name="adsphoto[]" value="" class="inputbox" /><br />
<input type="file" name="adsphoto[]" value="" class="inputbox" /><br />
<input type="file" name="adsphoto[]" value="" class="inputbox" /><br />
<input type="file" name="adsphoto[]" value="" class="inputbox" /><br />
<input type="file" name="adsphoto[]" value="" class="inputbox" />
</td>
</tr>
</tbody>
</table>
<input type="hidden" name="ajax_file" value="<?php echo JURI::base().'administrator/components/com_as_ads/ajax.php'; ?>" />
<input type="hidden" name="option" value="com_as_ads" />
<input type="hidden" name="task" value="ads_addsrv" />
<br />
<center><input type="submit" name="ads_submit" class="ads_submit" value="Добавить" /></center>
</form>

\components\com_ads\views\as_adsaddsrv\view.html.php
Код
<?php

defined('_JEXEC') or die( 'Restricted access' );

jimport( 'joomla.application.component.view');

class As_AdsViewAs_AdsAddSrv extends JView {

function display($tpl = null) {
global $mainframe, $option;

JHTML::_('stylesheet', 'as_adsaddsrv.css', 'components/com_as_ads/css/');

$user = &JFactory::getUser();
$uri =& JFactory::getURI();
$model = &$this->getModel('as_adsaddsrv');
$document =& JFactory::getDocument();
$document =& JFactory::getDocument(); $this->assignRef('document', $document);

$conf =& JFactory::getConfig();
$siteName = $conf->getValue('config.sitename');
$document->setTitle($siteName.' - Добавить объявление');

$this->assignRef('model', $model);

parent::display();
}

}

?>

\components\com_ads\controller.php
Код
<?php

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.application.component.controller' );

class As_AdsController extends JController {
  
function display() {
$document =& JFactory::getDocument();

$viewName = JRequest::getCmd('view', 'as_ads');
$viewType = $document->getType();

$view = &$this->getView($viewName, $viewType);

$model = &$this->getModel( $viewName );
if (!JError::isError( $model )) {
$view->setModel( $model, true );
}

$view->display();
  }

function ads_addsrv() {
$model =& $this->getModel( 'as_adsaddsrv' );
$post = JRequest::get( 'post' );
$files = JRequest::get( 'files' );
$images = $files['adsphoto'];
$imgCount = 1;

$obj = new stdClass();
$obj->publish = 0;
$obj->ads_view = 0;
$obj->date_start = date('Y-m-d');
$obj->date_end = date('Y-m-d', strtotime('+365 day'));
$obj->tip_servisa = $post['tip_servisa'];
$obj->dop_info = $post['dop_info'];
$imgNames = $model->loadImages($images);

if ($imgNames) {
foreach ($imgNames AS $img) {
eval('$obj->photo'.$imgCount.' = $img;');
$imgCount++;
}
}

if ($id = $model->adsAdd($obj)) {
$this->setRedirect( 'index.php?option=com_as_ads&view=as_adsmessage&adsid='.$id );
//$this->setMessage( JText::_('Ваше объявление добавленно с ID '.$id) );
} else {
$this->setRedirect( 'index.php?option=com_as_ads&view=as_adslistsrv' );
JError::raiseWarning(500, JText::_('Error'));
}
}

?>

\components\com_ads\models\as_adsaddsrv.php
Код
<?php

defined('_JEXEC') or die( 'Restricted access' );

jimport('joomla.application.component.model');

class As_AdsModelAs_AdsAddSrv extends JModel {
function __construct() {
parent::__construct();
}

function adsAdd($data) {
$db = &JFactory::getDBO();

if (!is_object($data))
return false;

if ($db->insertObject('#__as_ads_serv', $data))
return $db->insertid();
else
return false;
}

function loadImages($images) {
$imgTypes = array('image/jpeg', 'image/gif', 'image/png');
$imgList = array();
$imgName = '';

for ($i=0; $i<count($images['name']); $i++) {
if (in_array(strtolower($images['type'][$i]), $imgTypes)) {
$imgName = md5($images['name'][$i].mt_rand()).'.'.strtolower(array_pop(explode('.', $images['name'][$i])));
if (copy($images['tmp_name'][$i], AS_ADS_IMG_PATH.$imgName)) {
$imgList[] = $this->resizeImage(AS_ADS_IMG_PATH.$imgName, AS_ADS_IMG_PATH.$imgName);
}
}
}

if (!count($imgList))
return false;
else
return $imgList;
}

function resizeImage($imgFromPath, $imgToPath, $imgNWidth=400) {
if (!is_file($imgFromPath))
return false;

$imgExt = strtolower($this->getImageType($imgFromPath));
eval('$imgFrom = imagecreatefrom'.$imgExt.'("$imgFromPath");');
$imgFromX = imagesx($imgFrom);
$imgFromY = imagesy($imgFrom);

if ($imgFromX > $imgNWidth) {
$imgNHeight = round($imgNWidth * $imgFromY / $imgFromX);

$imgTo = imagecreatetruecolor($imgNWidth, $imgNHeight);
imagecopyresized($imgTo, $imgFrom, 0, 0, 0, 0, $imgNWidth, $imgNHeight, $imgFromX, $imgFromY);
imagejpeg($imgTo, $imgToPath);

imagedestroy($imgTo);
}
imagedestroy($imgFrom);

$this->addWatermark($imgToPath, AS_ADS_IMG_PATH.'watermark.png');

return basename($imgToPath);
}

function addWatermark($imgPath, $watermarkPath) {
    
    if (!file_exists($imgPath) || !file_exists($watermarkPath)) {
      return false;
    }
    
    $typeImg = $this->getImageType($imgPath);
    
    eval('$img = imagecreatefrom'.$typeImg.'($imgPath);');
    $wm = imagecreatefrompng($watermarkPath);
    
    if (!$img || !$wm)
      return false;
      
    $img_w = $img_h = $wm_w = $wm_h = $img_x = $img_y = 0;
      
    $img_w = imagesx($img);
    $img_h = imagesy($img);
    
    $wm_w = $wm_w_t = imagesx($wm);
    $wm_h = $wm_h_t = imagesy($wm);

if (($wm_w + 10) >= $img_w) {
$wm_w_t = round($wm_w - 10 - ($wm_w - $img_w));
$wm_h_t = round($wm_h * $wm_w_t / $wm_w);
}

if (($wm_h + 10) >= $img_h) {
$wm_h_t = round($wm_h - 10 - ($wm_h - $img_h));
$wm_w_t = round($wm_w * $wm_h_t / $wm_h);
}
    
    $img_x = $img_w-$wm_w_t-10;
    $img_y = $img_h-$wm_h_t-10;
      
imagecopyresized($img, $wm, $img_x, $img_y, 0, 0, $wm_w_t, $wm_h_t, $wm_w, $wm_h);
    
    eval('image'.$typeImg.'($img, $imgPath);');
    
    imagedestroy($img);
    imagedestroy($wm);
    
    return true;
  }

function getImageType($imgPath) {
    $type = getimagesize($imgPath);
    if (!$type)
      return false;
    switch ($type[2]) {
      case 1:
        return 'gif';
      break;
      case 2:
        return 'jpeg';
      break;
      case 3:
        return 'png';
      break;
    }
  }

}

?>

Кокой кусок кода с кокого файла вам предостаивть ещё?   :'(
*

ShadowXak

  • Завсегдатай
  • 1602
  • 162 / 6
  • no more programming
Re: Проблема с IE
« Ответ #1 : 12.08.2010, 07:24:58 »
Прикольный пост :)
Цитировать
у меня не работает авто(не заводится), вот вам карбюратор поглядите, если что то еще нужно я вам принесу, хоть колеса, аккумулятор, а хотите двигатель принесу, а?
---
по теме, вы может урл на сайт дадите, так проще увидеть ошибку которая влияет на IE, а не сидеть и из кускоф файлов перебирать что куда.
*

pantela

  • Захожу иногда
  • 257
  • 1 / 0
Re: Проблема с IE
« Ответ #2 : 12.08.2010, 07:37:24 »
IE - Вобще никоких ERROR не выводит в статусе баре...  :(

Как я понял у меня проблема в этой функции вроде:

Код
function loadImages($images) {
                $imgTypes = array('image/jpeg', 'image/gif', 'image/png');
                $imgList = array();
                $imgName = '';
                
                for ($i=0; $i<count($images['name']); $i++) {
                        if (in_array(strtolower($images['type'][$i]), $imgTypes)) {
                                $imgName = md5($images['name'][$i].mt_rand()).'.'.strtolower(array_pop(explode('.', $images['name'][$i])));
                                if (copy($images['tmp_name'][$i], AS_ADS_IMG_PATH.$imgName)) {
                                        $imgList[] = $this->resizeImage(AS_ADS_IMG_PATH.$imgName, AS_ADS_IMG_PATH.$imgName);
                                }
                        }
                }
 
                if (!count($imgList))
                        return false;
                else
                        return $imgList;
        }


т.к. когда я её вырезаю,

Код
for ($i=0; $i<count($images['name']); $i++) {
                        if (in_array(strtolower($images['type'][$i]), $imgTypes)) {
                                $imgName = md5($images['name'][$i].mt_rand()).'.'.strtolower(array_pop(explode('.', $images['name'][$i])));
                                if (copy($images['tmp_name'][$i], AS_ADS_IMG_PATH.$imgName)) {
                                        $imgList[] = $this->resizeImage(AS_ADS_IMG_PATH.$imgName, AS_ADS_IMG_PATH.$imgName);
                                }
                        }
                }
таже проблема просиходит и в ОПЕРЕ и ФФ. - помоему логично я рассуждаю.
*

ShadowXak

  • Завсегдатай
  • 1602
  • 162 / 6
  • no more programming
Re: Проблема с IE
« Ответ #3 : 12.08.2010, 07:40:26 »
Вам веднее :) вы видите сайт и видите код воочию, нам достаются только обрывки, сложно дать урл на сайт? или он у вас на локалке?
*

pantela

  • Захожу иногда
  • 257
  • 1 / 0
Re: Проблема с IE
« Ответ #4 : 12.08.2010, 07:45:57 »
Да нет, вот залилвю сайт ан сервер
« Последнее редактирование: 13.08.2010, 22:10:25 от pantela »
*

ShadowXak

  • Завсегдатай
  • 1602
  • 162 / 6
  • no more programming
Re: Проблема с IE
« Ответ #5 : 12.08.2010, 07:54:44 »
круто, я вот даже х.з. добавилось или нет
« Последнее редактирование: 14.08.2010, 06:49:24 от ShadowXak »
*

pantela

  • Захожу иногда
  • 257
  • 1 / 0
Re: Проблема с IE
« Ответ #6 : 12.08.2010, 07:59:25 »
так я же написа что добавить добавляется, вот только фото не леписят через ИЕ
*

ShadowXak

  • Завсегдатай
  • 1602
  • 162 / 6
  • no more programming
Re: Проблема с IE
« Ответ #7 : 12.08.2010, 08:15:04 »
то что я добавил есть фото?
*

pantela

  • Захожу иногда
  • 257
  • 1 / 0
Re: Проблема с IE
« Ответ #8 : 12.08.2010, 08:19:15 »
Да есть, как видно ты только 1 фото добавил и то не через IE. да ?
« Последнее редактирование: 13.08.2010, 22:09:42 от pantela »
*

ShadowXak

  • Завсегдатай
  • 1602
  • 162 / 6
  • no more programming
Re: Проблема с IE
« Ответ #9 : 12.08.2010, 08:40:57 »
да не через ie на работе к сожалению этот зверь уничтожен, как и дома :)
подождем может появится кто у кого этот зверюга стоит
*

pantela

  • Захожу иногда
  • 257
  • 1 / 0
Re: Проблема с IE
« Ответ #10 : 12.08.2010, 08:57:59 »
ок подождём спс коненчо, но на 100% уврене что в ИЕ не работат на 5 комопв тестил...
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Проблема с IE
« Ответ #11 : 12.08.2010, 09:11:21 »
Для начала
PHP - это серверный язык программирования.
И теперь объясните, каким боком он может зависеть от используемого браузера? Если конечно сами там не прописывали условий для определенных браузеров.
*

pantela

  • Захожу иногда
  • 257
  • 1 / 0
Re: Проблема с IE
« Ответ #12 : 12.08.2010, 09:16:45 »
Вот втом и дело то что запутался...

Условии не прописаны, JS файлы не подключены, форма как форма вроде добавления,
но вот вчём косяк... первый раз столкнулся...
*

pantela

  • Захожу иногда
  • 257
  • 1 / 0
Re: Проблема с IE
« Ответ #13 : 12.08.2010, 09:40:48 »
Проблема решена, тип файла не был добавлен в контейнер,
почему-то в IE токо тип надо было добавить "image/pjpeg" откуда IE берёт эту букву "p" к типу странно

P.S. пожалуйсто удалите тему.
Большое спасибо и извините.
*

ShadowXak

  • Завсегдатай
  • 1602
  • 162 / 6
  • no more programming
Re: Проблема с IE
« Ответ #14 : 12.08.2010, 10:24:23 »
Удалять не нужно, вдруг кому пригодится :)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Проблема со входом в Админ панель после переноса сайта

Автор Vlad Ermolaev

Ответов: 11
Просмотров: 4183
Последний ответ 12.12.2019, 15:48:25
от SeBun
[Решено] Проблема с авторизацией Invalid Token

Автор treX

Ответов: 100
Просмотров: 97121
Последний ответ 06.10.2019, 16:55:45
от PaLyCH
Проблема c MobileJoomla

Автор alexmishka

Ответов: 0
Просмотров: 1775
Последний ответ 25.02.2018, 20:32:10
от alexmishka
Вопрос при переходе на https/ Проблема с внутренними ссылками

Автор krot

Ответов: 4
Просмотров: 2123
Последний ответ 06.02.2018, 09:21:33
от krot
Проблема при переносе Joomla на xampp

Автор sbabaev

Ответов: 6
Просмотров: 7503
Последний ответ 28.07.2017, 09:06:10
от pro100skill