Решение проблемы генерации Google-sitemap — различия между версиями
Alexh (обсуждение | вклад) |
Mad grant (обсуждение | вклад) |
||
(не показано 9 промежуточных версий 2 участников) | |||
Строка 3: | Строка 3: | ||
При попытке сгенерировать карту сайта запросом http://domain.com/google-sitemap появляется ошибка: | При попытке сгенерировать карту сайта запросом 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''' | Для решения проблемы необходимо написать кастомный макрос, которой изменит логику формирования карты сайта и тем самым снизит нагрузку на сервер. При написании макроса нам потребуется информация из статьи [[Использование_кастомных_макросов_в_XSLT]] Сам кастомный макрос необходимо записать в файл '''~classes/modules/custom.php''' | ||
− | <source> | + | <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> | </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" />