Новости Joomla

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

Solvedor

  • Захожу иногда
  • 376
  • 33 / 0
  • Масенький Йожик
Вообще-то хак был подробно расписан вот тут http://www.senyahnoj.org.uk/2010/08/05/joomla-last-modified-header/
но страничка не открывается  >:(

а еще предлагают вот такой хак для com_content:
Код
JResponse::setHeader( 'Last-Modified', $yourDateHere );

Вот тут http://www.specialist.ru/message/72213/1 тоже интересненько написано
« Последнее редактирование: 31.03.2012, 11:00:01 от Solvedor »
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
А что толку если if-modified-since не учитывается?
Поисковики ведь шлют этот заголовок? Если да, то они наверно приходят в недоумение, почему они просят документ только в случае если он обновился,а сервер отдает его с кодом 200 ОК даже если он 300 лет не менялся..
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

fox7812

  • Захожу иногда
  • 111
  • 18 / 0
Вот работающее решение.
Если страница главная отдаётся материал на главной (вручную прописываем id). Любой другой материал отдается автоматом. Если страница не материал и не главная отдается текущаю дата (я расширял этот код для virtuemart). Код оптимизирован для Joomla 2.5.

в файле \libraries\joomla\environment\response.php сразу после public static function sendHeaders()
   {

вставляем

Код
//Хак отдача last_modified доп функция класса стр 63
//проверяем главная, материал, или неизвестно что
if(JRequest::getVar('view')=='featured')
{
$id_lm = '6';
}
elseif(JRequest::getVar('id')){
$id_lm = JRequest::getVar('id');
}
else{
$lastmodsite = gmdate("D, d M Y H:i:s").' GMT';
};
if($id_lm){
//Запрос к функции класса запрос к БД
$result = JResponse::getDblm('modified','#__content','id',$id_lm);
//Разбиваем на значения
$year_lm=substr($result, 0, 4);
$mount_lm=substr($result, 5, 2);
$day_lm=substr($result, 8, 2);
$time_lm=substr($result, 10, 9);
   //Переводим в UNIX-формат и получаем текстовые значения дня и месяца
$time_lm_unix_in = $year_lm.'-'.$mount_lm.'-'.$day_lm.' '.$time_lm;
$day_lm_unix = date('D',strtotime($time_lm_unix_in));
$mount_lm_unix = date('M',strtotime($time_lm_unix_in));
//Сохраняем значение для поверки If-modified-since
$select_lm = strtotime($time_lm_unix_in);
//Формируем Last-modified
$lastmodsite = $day_lm_unix.', '.$day_lm.' '.$mount_lm_unix.' '.$year_lm.' '.$time_lm.' GMT';
};

if(isset($_ENV['HTTP_IF_MODIFIED_SINCE']) && $id_lm){    
$IfModifiedSince = strtotime(substr($_ENV['HTTP_IF_MODIFIED_SINCE'], 5));  
if($select_lm <= $IfModifiedSince){
header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
};
};

JResponse::setHeader('Last-Modified',$lastmodsite,true);
//Конец хака

примерно на 63 строке файла размещаем:

public static function getDBlm($row_lm,$tab_lm,$query_lm,$id_lm)
   {
      $db = &JFactory::getDBO();
      $query = "SELECT `$row_lm` FROM `$tab_lm` WHERE `$query_lm` = '$id_lm'";
      $db->setQuery($query);
      $select_lm = $db->loadResult();
      return $select_lm;
   }

это простой пример отдает last modified и if-modified-since. Улучшить и доработать можно под что угодно.
*

Solvedor

  • Захожу иногда
  • 376
  • 33 / 0
  • Масенький Йожик
Если страница главная отдаётся материал на главной (вручную прописываем id). Любой другой материал отдается автоматом. Если страница не материал и не главная отдается текущаю дата.
эээ.... а можно по-русски? особенно про "если страница не материал". и про главную. где id прописывается?

Код оптимизирован для Joomla 2.5.
а под 1.5?

примерно на 63 строке файла размещаем:
что значит примерно? надо бы указывать перед или после какой строки.

а так - молодец!  *DRINK* будет решение под 1.5 поставлю плюсик  ;D
*

fox7812

  • Захожу иногда
  • 111
  • 18 / 0
public static function getDBlm($row_lm,$tab_lm,$query_lm,$id_lm)
   {
      $db = &JFactory::getDBO();
      $query = "SELECT `$row_lm` FROM `$tab_lm` WHERE `$query_lm` = '$id_lm'";
      $db->setQuery($query);
      $select_lm = $db->loadResult();
      return $select_lm;
   }

размещаем после:
public static function allowCache($allow = null)
   {
      if (!is_null($allow))
      {
         self::$cachable = (bool) $allow;
      }

      return self::$cachable;
   }
*

Solvedor

  • Захожу иногда
  • 376
  • 33 / 0
  • Масенький Йожик
public static function getDBlm($row_lm,$tab_lm,$query_lm,$id_lm)
   {
      $db = &JFactory::getDBO();
      $query = "SELECT `$row_lm` FROM `$tab_lm` WHERE `$query_lm` = '$id_lm'";
      $db->setQuery($query);
      $select_lm = $db->loadResult();
      return $select_lm;
   }

размещаем после:
public static function allowCache($allow = null)
   {
      if (!is_null($allow))
      {
         self::$cachable = (bool) $allow;
      }

      return self::$cachable;
   }
так это только под 2.5? а под 1.5 как сделать? думаю, респектов будет море...
*

fox7812

  • Захожу иногда
  • 111
  • 18 / 0
То же самое для Joomla 1.5:

после:
function allowCache($allow = null)
   {
      if (!is_null($allow)) {
         $GLOBALS['_JRESPONSE']->cachable = (bool) $allow;
      }
      return $GLOBALS['_JRESPONSE']->cachable;
   }

вставляем:
function getDBlm($row_lm,$tab_lm,$query_lm,$id_lm)
   {
      $db = &JFactory::getDBO();
      $query = "SELECT `$row_lm` FROM `$tab_lm` WHERE `$query_lm` = '$id_lm'";
      $db->setQuery($query);
      $select_lm = $db->loadResult();
      return $select_lm;
   }

меняем содержимое
if (JResponse::allowCache() === false)
                {  
на

if(JRequest::getVar('view')=='frontpage')
{
       $id_lm = '6';//ставим id cвоего материала на главной
}
elseif(JRequest::getVar('id')){
   $id_lm = JRequest::getVar('id');
}
else{
   $lastmodsite = gmdate("D, d M Y H:i:s").' GMT';
};
if($id_lm){
   //Запрос к функции класса запрос к БД
   $result = JResponse::getDblm('modified','#__content','id',$id_lm);
   //Разбиваем на значения
   $year_lm=substr($result, 0, 4);
   $mount_lm=substr($result, 5, 2);
   $day_lm=substr($result, 8, 2);
   $time_lm=substr($result, 10, 9);
   //Переводим в UNIX-формат и получаем текстовые значения дня и месяца
   $time_lm_unix_in = $year_lm.'-'.$mount_lm.'-'.$day_lm.' '.$time_lm;
   $day_lm_unix = date('D',strtotime($time_lm_unix_in));
   $mount_lm_unix = date('M',strtotime($time_lm_unix_in));
        //Сохраняем значение для поверки If-modified-since
   $select_lm = strtotime($time_lm_unix_in);
   //Формируем last-modified                                       
       $lastmodsite = $day_lm_unix.', '.$day_lm.' '.$mount_lm_unix.' '.$year_lm.' '.$time_lm.' GMT';
};
         
if(isset($_ENV['HTTP_IF_MODIFIED_SINCE']) && $id_lm){    
         $IfModifiedSince = strtotime(substr($_ENV['HTTP_IF_MODIFIED_SINCE'], 5));  
    if($select_lm <= $IfModifiedSince){
      header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
   };
};         
         
JResponse::setHeader( 'Expires', 'Mon, 1 Jan 2001 00:00:00 GMT', true );                     
JResponse::setHeader('Last-Modified',$lastmodsite,true);

JResponse::setHeader( 'Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', false);
JResponse::setHeader( 'Pragma', 'no-cache' );
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

fox7812

  • Захожу иногда
  • 111
  • 18 / 0
код используется на рабочих сайтах:
joomla 1.5 - www.na-opushke.ru
joomla 2.5 - www.spb-servic.ru

Проверить можно здесь:
http://last-modified.com/ru/last-modified-if-modified-since-php.html
« Последнее редактирование: 17.05.2012, 11:46:29 от fox7812 »
*

Solvedor

  • Захожу иногда
  • 376
  • 33 / 0
  • Масенький Йожик
код используется на рабочих сайтах:
joomla 1.5 - www.na-opushke.ru
joomla 2.5 - www.spb-servic.ru

Проверить можно здесь:
http://last-modified.com/ru/last-modified-if-modified-since-php.html
проверил на опушке - работает, в натуре. проверял страничку "Доставка и оплата". Проверю у себя, с меня +1. Да и не только с меня, думаю. А решение, если действительно работает, нужно будет в фак внести. Буду ходатайствовать перед админами.

упс. забыл, а с id то что? что и куда вставлять? туплю  :'(  вернее, если на главной блог, а не страница, то тогда что?
« Последнее редактирование: 17.05.2012, 11:58:29 от Solvedor »
*

fox7812

  • Захожу иногда
  • 111
  • 18 / 0
na-opushke.ru решение работает также и под VirtueMart. Про id Главной просто парится не стал. Нужно прописать вручную id материала, который размещается на главной странице вот здесь:
f(JRequest::getVar('view')=='frontpage')
{
       $id_lm = '6';//ставим id cвоего материала на главной
}
*

fox7812

  • Захожу иногда
  • 111
  • 18 / 0
Если на Главной - блог. Надо в БД смотреть если ли там дата изменения и где она, и переписываем код под Главную на эту дату изменения в БД.
*

Solvedor

  • Захожу иногда
  • 376
  • 33 / 0
  • Масенький Йожик
Если на Главной - блог. Надо в БД смотреть если ли там дата изменения и где она, и переписываем код под Главную на эту дату изменения в БД.
за вывод контента на главной отвечает таблица jos_content_frontpage.

картинка там такая (примерно):



то есть даты то ни у одного материала нет. вот что с этим делать?
*

Solvedor

  • Захожу иногда
  • 376
  • 33 / 0
  • Масенький Йожик
А вот и результат этого хака на J1.5:


это внутренняя страница.

вот главная (просто указал id, хотя там и блог) - все корректно:



или я чего-то не понимаю, или...    >:(
« Последнее редактирование: 17.05.2012, 12:52:07 от Solvedor »
*

fox7812

  • Захожу иногда
  • 111
  • 18 / 0
if-modified-since работает только если есть от чего его брать. То есть существует $id_lm. Как видите код рабочий. Для конкретных случаев может требоваться доработка.
*

Solvedor

  • Захожу иногда
  • 376
  • 33 / 0
  • Масенький Йожик
if-modified-since работает только если есть от чего его брать. То есть существует $id_lm. Как видите код рабочий. Для конкретных случаев может требоваться доработка.
ну так у внутренней страницы дата изменения есть. а тут выходят только нулевые значения. у вас то работает...
*

Solvedor

  • Захожу иногда
  • 376
  • 33 / 0
  • Масенький Йожик
ТАДАМ!

Вопрос, мучавший полмира столько лет решил скромный русский парень под ником fox7812. Низкий ему поклон, респект и уважуха.
Поюзали мы с ним, посмотрели, код работает на все 100. Эт у меня на сайте заморочи были. Разгребемся.

Так что:
1. Пользуемся и не забываем ставить +
2. Если что-то непонятно, пишем fox7812 в личку, но потом не забываем отблагодарить масенькой копеечкой (ну старался человек, ночей не спал...)
3. Огромная просьба к ELLE перенести это решение в FAQ и повесить фоксу мядальку  ;D

УРА, ТОВАРИЩИ!
« Последнее редактирование: 27.05.2012, 19:52:53 от ELLE »
*

voland

  • Легенда
  • 11031
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Ой не надо ерунду писать.
Решение даже не через плагин и совсем не универсальное, не для всех компонентов, без модулей итп..
Вообщем - шаг назад.
*

Solvedor

  • Захожу иногда
  • 376
  • 33 / 0
  • Масенький Йожик
Ой не надо ерунду писать.
Решение даже не через плагин и совсем не универсальное, не для всех компонентов, без модулей итп..
Вообщем - шаг назад.
мде? а чота я не видел в ВАШЕМ исполнении решения данног8о вопроса. Более того, на офсайте Joomla та же хрень: никто нихрена не знает. Повыпендриваца захотелось? Выпендривайтесь кодом!
*

johnrass

  • Захожу иногда
  • 125
  • 26 / 0
Вот мое решение, если нужно только для материалов, конечно не идеальное(не плагином, не для всего и прочее), но работает (j2.5)
в файл /components/com_content/views/article/tmpl/default.php в начало после
Код
$params		= $this->item->params;
$images = json_decode($this->item->images);
$urls = json_decode($this->item->urls);
$canEdit = $this->item->params->get('access-edit');
$user = JFactory::getUser();

?>
дописать блок
Код
<?php 
$lastModif = $this->item->modified;
$IfModifiedSince = false;
if (isset($_ENV['HTTP_IF_MODIFIED_SINCE']))
$IfModifiedSince = strtotime(substr($_ENV['HTTP_IF_MODIFIED_SINCE'], 5));  
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))    
$IfModifiedSince = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5));
if ($IfModifiedSince && $IfModifiedSince >= strtotime($lastModif)) {    
header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');    
exit;
}
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', strtotime($lastModif)). ' GMT');
?>
*

skai

  • Moderator
  • 1198
  • 153 / 1
  • skaiseo
Вот работающее решение....
.....это простой пример отдает last modified и if-modified-since. Улучшить и доработать можно под что угодно.
- хорошо бы оформить в плагин!
Наполнение вашего сайта - 1т.р. стр. (текст, изображения, мета, перелинковка). Гарантия высокого ранжирования. SEO консультация в подарок.
----------------------------------------------------------------------------------------------
*

Solvedor

  • Захожу иногда
  • 376
  • 33 / 0
  • Масенький Йожик
- хорошо бы оформить в плагин!
если я ничего не путаю, плагин оформил fox7812. аккурат для 2.5.
*

voland

  • Легенда
  • 11031
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
если я ничего не путаю, плагин оформил fox7812. аккурат для 2.5.
где же этот плагин?
*

Solvedor

  • Захожу иногда
  • 376
  • 33 / 0
  • Масенький Йожик
где же этот плагин?
ну дак у человека и надо спрашивать :)
*

voland

  • Легенда
  • 11031
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Прошу:
http://www.sdf-group.ru/joomla/plagin-joomla-last-modified-i-if-modified-since.html
А ничего что полфорума обсуждало и абсолютно ничего нового не написано? Только стандартные материалы и не учитываются модули? Не стыдно за это денег брать?
*

fox7812

  • Захожу иногда
  • 111
  • 18 / 0
Код выложен бесплатно. Не вижу причин для стыда.
*

fox7812

  • Захожу иногда
  • 111
  • 18 / 0
Выложил бесплатно, кто сочтет нужным - кинет копеечку. Всем спасибо. Пользуйтесь.
*

reasons

  • Захожу иногда
  • 382
  • 6 / 0
  • http://dehost.biz
на 1.5 работает?
*

Solvedor

  • Захожу иногда
  • 376
  • 33 / 0
  • Масенький Йожик
на 1.5 работает?
неа. в полуторке тока ручками
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

WT SEO Meta templates плагин сео-шаблонов для Joomla

Автор sergeytolkachyov

Ответов: 25
Просмотров: 2790
Последний ответ 24.11.2023, 10:24:11
от sergeytolkachyov
lm_any - плагин Last-Modified для любого контента

Автор yunoshev

Ответов: 471
Просмотров: 50502
Последний ответ 15.03.2023, 12:23:54
от Cyberneer
Нет позиций в Google Joomla 3

Автор Benderalfa

Ответов: 1
Просмотров: 1237
Последний ответ 20.09.2022, 20:53:56
от darkghost
Расширенные описания страниц в Joomla (микроданные, микроформаты, RDFa, schema.org)

Автор ELLE

Ответов: 151
Просмотров: 106215
Последний ответ 20.11.2021, 18:15:42
от Byzi
Вопрос по отличию SEO MODx и Joomla

Автор vovafit

Ответов: 7
Просмотров: 1379
Последний ответ 20.11.2021, 18:15:09
от Byzi