Решение проблемы генерации Google-sitemap — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показано 10 промежуточных версий 2 участников)
Строка 3: Строка 3:
 
При попытке сгенерировать карту сайта запросом http://domain.com/google-sitemap появляется ошибка:  
 
При попытке сгенерировать карту сайта запросом http://domain.com/google-sitemap появляется ошибка:  
  
[[Файл:Google-sitemap-err.png]]
+
 
 +
'''Fatal error''': Allowed memory size of 33554432 bytes exhausted (tried to allocate 32 bytes) in '''/classes/system/subsystem/models/data/umiObjectProperty.php''' on line '''334'''
 +
 
  
 
Данная ошибка вызвана ограниченными ресурсами сервера и большим количеством страниц на сайте, так как в таком случае происходит обработка большого объема данных.  
 
Данная ошибка вызвана ограниченными ресурсами сервера и большим количеством страниц на сайте, так как в таком случае происходит обработка большого объема данных.  
  
  
РЕШЕНИЕ:
+
 
 +
'''РЕШЕНИЕ:'''
 +
 
  
 
Для решения проблемы необходимо написать кастомный макрос, которой изменит логику формирования карты сайта и тем самым снизит нагрузку на сервер. При написании макроса нам потребуется информация из статьи [[Использование_кастомных_макросов_в_XSLT]] Сам кастомный макрос необходимо записать в файл '''~classes/modules/custom.php'''
 
Для решения проблемы необходимо написать кастомный макрос, которой изменит логику формирования карты сайта и тем самым снизит нагрузку на сервер. При написании макроса нам потребуется информация из статьи [[Использование_кастомных_макросов_в_XSLT]] Сам кастомный макрос необходимо записать в файл '''~classes/modules/custom.php'''
 +
 +
<source lang="php">
 +
public function smap($id) {
 +
$sql = "SELECT updatetime  FROM `cms3_hierarchy` WHERE `id` = {$id}";
 +
$result = l_mysql_query($sql);
 +
$row = mysql_fetch_row($result);
 +
list($updt_time) = $row;
 +
 +
return $updt_time;
 +
}
 +
</source>
 +
 +
 +
Далее необходимо внести изменения в шаблон, по которому происходит формирование карты сайта '''~/xsltTpls/sys-tpls/google-sitemap.xsl'''. Заменяем строчку в блоке <code><xsl:template match="item"> </code>
 +
<source lang="xml">
 +
<xsl:variable name="update-time" select="document(@xlink:href)/udata/page/@update-time" />
 +
</source>
 +
 +
на
 +
 +
<source lang="xml">
 +
<xsl:variable name="update-time" select="document(concat('udata://custom/smap/', @id))/udata" />
 +
</source>
 +
 +
[[Категория:Решение проблем и ошибок]]

Текущая версия на 21:16, 4 июня 2013

ПРОБЛЕМА:

При попытке сгенерировать карту сайта запросом http://domain.com/google-sitemap появляется ошибка:


Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 32 bytes) in /classes/system/subsystem/models/data/umiObjectProperty.php on line 334


Данная ошибка вызвана ограниченными ресурсами сервера и большим количеством страниц на сайте, так как в таком случае происходит обработка большого объема данных.


РЕШЕНИЕ:


Для решения проблемы необходимо написать кастомный макрос, которой изменит логику формирования карты сайта и тем самым снизит нагрузку на сервер. При написании макроса нам потребуется информация из статьи Использование_кастомных_макросов_в_XSLT Сам кастомный макрос необходимо записать в файл ~classes/modules/custom.php

public function smap($id) {
	$sql = "SELECT updatetime  FROM `cms3_hierarchy` WHERE `id` = {$id}";
	$result = l_mysql_query($sql);
	$row = mysql_fetch_row($result);
	list($updt_time) = $row;

	return $updt_time;
}


Далее необходимо внести изменения в шаблон, по которому происходит формирование карты сайта ~/xsltTpls/sys-tpls/google-sitemap.xsl. Заменяем строчку в блоке <xsl:template match="item">

<xsl:variable name="update-time" select="document(@xlink:href)/udata/page/@update-time" />

на

<xsl:variable name="update-time" select="document(concat('udata://custom/smap/', @id))/udata" />