Карта сайта без каких-либо настроек страниц — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показано 10 промежуточных версий 4 участников)
Строка 1: Строка 1:
 
  [[category:Написание кастомных макросов]]
 
  [[category:Написание кастомных макросов]]
Если вдруг кому-то очень надо вывести карту сайту с абсолютно всеми активными страницами, без учета того стоит галка "Показывать в меню" или нет, то можно данные два метода прописать в classes/modules/custom.php и использовать:
+
'''Актуально для версии 18.'''
 +
 
 +
Если необходимо вывести карту сайта с абсолютно всеми активными страницами без учета того, стоит чекбокс "Показывать в меню" или нет, то можно данные два метода прописать в classes/modules/custom.php (для старой реализации модулей) или в classes/components/custom.php (для новой реализации модулей) и использовать:
  
 
<source lang="php">
 
<source lang="php">
Строка 6: Строка 8:
 
if(def_module::breakMe()) return;
 
if(def_module::breakMe()) return;
  
 +
if(!$max_depth) $max_depth = getRequest('param0');
 
if(!$max_depth) $max_depth = 4;
 
if(!$max_depth) $max_depth = 4;
  
Строка 30: Строка 33:
 
if($element = umiHierarchy::getInstance()->getElement($element_id)) {
 
if($element = umiHierarchy::getInstance()->getElement($element_id)) {
 
$link = umiHierarchy::getInstance()->getPathById($element_id);
 
$link = umiHierarchy::getInstance()->getPathById($element_id);
 +
$update_time = $element->getUpdateTime();
  
 
$item_arr = Array();
 
$item_arr = Array();
Строка 36: Строка 40:
 
$item_arr['attribute:name'] = $element->getObject()->getName();
 
$item_arr['attribute:name'] = $element->getObject()->getName();
 
$item_arr['xlink:href'] = "upage://" . $element_id;
 
$item_arr['xlink:href'] = "upage://" . $element_id;
 +
$item_arr['attribute:update-time'] = date('c', $update_time);
  
 
if($max_depth > 0) {
 
if($max_depth > 0) {
Строка 59: Строка 64:
  
 
Пример вызова: %custom sitemapnew(default,10)%
 
Пример вызова: %custom sitemapnew(default,10)%
 +
 +
Новый вариант метода sitemap можно использовать при построении xml-ого варианта карты сайты, т.е.
 +
можно использовать вызов: http://ваш_домен/google-sitemap.xml , необходимо только в шаблоне
 +
~/umaps/sitemap.xml поменять вызов метода с:
 +
<pre>
 +
udata://content/sitemap/
 +
</pre>
 +
на:
 +
<pre>
 +
udata://custom/sitemapnew/10/
 +
</pre>
 +
 +
10 — это глубина поиска всех активных страниц сайта.
 +
 +
Если при формировании XML-карты сайта у вас на сайте происходит редирект на какую-либо страницу, то необходимо в файле /umaps/sitemap.xml поменять строку:
 +
<pre>
 +
<transform src="./xsltTpls/sys-tpls/google-sitemap.xsl">
 +
</pre>
 +
на
 +
<pre>
 +
<transform src="./xsltTpls/sys-tpls/google-sitemap2.xsl">
 +
</pre>
 +
Далее, в папке /xsltTpls/sys-tpls/ необходимо создать копию файла google-sitemap.xsl и переименовать в google-sitemap2.xsl. Открываем новый файл и меняем шаблон:
 +
<pre>
 +
<xsl:template match="item">
 +
...
 +
</xsl:template>
 +
</pre>
 +
на:
 +
<source lang="xml">
 +
<xsl:template match="item">
 +
  <url>
 +
    <loc>
 +
      <xsl:value-of select="concat('http://', $domain, @link)" />
 +
    </loc>
 +
    <lastmod>
 +
      <xsl:value-of select="@update-time" />
 +
    </lastmod>
 +
  </url>
 +
</xsl:template>
 +
</source>

Текущая версия на 12:09, 18 мая 2018

Актуально для версии 18.

Если необходимо вывести карту сайта с абсолютно всеми активными страницами без учета того, стоит чекбокс "Показывать в меню" или нет, то можно данные два метода прописать в classes/modules/custom.php (для старой реализации модулей) или в classes/components/custom.php (для новой реализации модулей) и использовать:

public function sitemapnew($template = "default", $max_depth = false, $root_id = false) {
if(def_module::breakMe()) return;

if(!$max_depth) $max_depth = getRequest('param0');
if(!$max_depth) $max_depth = 4;

if(!$root_id) $root_id = 0;

if(cmsController::getInstance()->getCurrentMethod() == "sitemap") {
def_module::setHeader("%content_sitemap%");
}

$site_tree = umiHierarchy::getInstance()->getChilds($root_id, false, true, $max_depth - 1);
return self::gen_sitemap($template, $site_tree, $max_depth - 1);
}

public function gen_sitemap($template = "default", $site_tree, $max_depth) {
$res = "";

list($template_block, $template_item) = def_module::loadTemplates("tpls/content/sitemap/{$template}.tpl", "block", "item");
list($template_block, $template_item) = def_module::loadTemplates("tpls/content/sitemap/{$template}.tpl", "block", "item");

$block_arr = Array();
$items = Array();
if(is_array($site_tree)) {
foreach($site_tree as $element_id => $childs) {
if($element = umiHierarchy::getInstance()->getElement($element_id)) {
$link = umiHierarchy::getInstance()->getPathById($element_id);
$update_time = $element->getUpdateTime();

$item_arr = Array();
$item_arr['attribute:id'] = $element_id;
$item_arr['attribute:link'] = $link;
$item_arr['attribute:name'] = $element->getObject()->getName();
$item_arr['xlink:href'] = "upage://" . $element_id;
$item_arr['attribute:update-time'] = date('c', $update_time);

if($max_depth > 0) {

$item_arr['nodes:items'] = $item_arr['void:sub_items'] = (sizeof($childs) && is_array($childs)) ? $this->gen_sitemap($template, $childs, ($max_depth - 1)) : "";
} else {
$item_arr['sub_items'] = "";
}

$items[] = def_module::parseTemplate($template_item, $item_arr, $element_id);

umiHierarchy::getInstance()->unloadElement($element_id);
} else {
continue;
}
}
}

$block_arr['subnodes:items'] = $items;
return def_module::parseTemplate($template_block, $block_arr, 0);
}

Пример вызова: %custom sitemapnew(default,10)%

Новый вариант метода sitemap можно использовать при построении xml-ого варианта карты сайты, т.е. можно использовать вызов: http://ваш_домен/google-sitemap.xml , необходимо только в шаблоне ~/umaps/sitemap.xml поменять вызов метода с:

udata://content/sitemap/

на:

udata://custom/sitemapnew/10/

10 — это глубина поиска всех активных страниц сайта.

Если при формировании XML-карты сайта у вас на сайте происходит редирект на какую-либо страницу, то необходимо в файле /umaps/sitemap.xml поменять строку:

<transform src="./xsltTpls/sys-tpls/google-sitemap.xsl">

на

 
<transform src="./xsltTpls/sys-tpls/google-sitemap2.xsl">

Далее, в папке /xsltTpls/sys-tpls/ необходимо создать копию файла google-sitemap.xsl и переименовать в google-sitemap2.xsl. Открываем новый файл и меняем шаблон:

<xsl:template match="item">
...
</xsl:template>

на:

<xsl:template match="item">
  <url>
    <loc>
      <xsl:value-of select="concat('http://', $domain, @link)" />
    </loc>
    <lastmod>
      <xsl:value-of select="@update-time" />
    </lastmod>
  </url>
</xsl:template>