$arValueSteps = array(
'init' => 0,
'init1' => 1,
'files' => 40,
'iblock_index' => 50,
'iblock' => 60,
'forum_index' => 70,
'forum' => 80,
'linii' => 90,
'index' => 100,
);
else if($v < $arValueSteps['linii']) {
$NS['time_start'] = microtime(true);
if(Main\Loader::includeModule('iblock')) {
$arLiniiList = array();
$dbLiniiResult = CIBlockElement::GetList(
array('ID' => 'ASC'),
array(
'IBLOCK_ID' => \Oneway\Constants::IBLOCK_CATALOG_LANDING,
'ACTIVE' => 'Y',
),
false,
false,
array('ID', 'TIMESTAMP_X', 'DETAIL_PAGE_URL','CODE','PROPERTY_SEGMENT')
);
$fileName= str_replace('files', 'linii', $arSitemap['SETTINGS']['FILENAME_FILES']);
$sitemapFile = new SitemapRuntime($PID, $fileName, $arSitemapSettings);
while($arElement = $dbLiniiResult->fetch()){
$arElement['CODE'] = $arElement['PROPERTY_SEGMENT_VALUE'];
$elementLastmod = MakeTimeStamp($arElement['TIMESTAMP_X']);
$url = \CIBlock::ReplaceDetailUrl($arElement['DETAIL_PAGE_URL'], $arElement, false, "E");
$sitemapFile->addIBlockEntry($url, $elementLastmod);
}
if($sitemapFile->isNotEmpty()) {
if($sitemapFile->isCurrentPartNotEmpty()) { $sitemapFile->finish(); }
else {$sitemapFile->delete(); }
if(!is_array($NS['XML_FILES']))
$NS['XML_FILES'] = array();
$NS['XML_FILES'] = array_merge($NS['XML_FILES'], $sitemapFile->getNameList());
}
}
}
$priority=array(
'MAIN'=>1,
CATALOG_IB=>array('E'=>'0.7','S'=>'0.8')
);
где CATALOG_IB - ID инфоблока к элементам и разделам которого необходимо установить приоритет
use Bitrix\Seo\SitemapRuntime as BaseSitemapRuntime;
use Bitrix\Main\Text\Converter;
use Bitrix\Main\IO\File;
class SitemapRuntime extends BaseSitemapRuntime
{
/*новая переменная для записи в карту*/
const ENTRY_TPL_PRIORITY = '<url><loc>%s</loc><lastmod>%s</lastmod><changefreq>weekly</changefreq><priority>%s</priority></url>';
/*новая переменная ограничения размера файла*/
const MAX_SIZE = 200000;
/*функция определения размера*/
protected function isSplitNeeded()
{
return $this->isExists() && $this->getSize() >= self::MAX_SIZE;
}
/*функция записи в файл, если страница с priority то записываем правила по новому шаблону*/
public function addEntry($entry)
{
if ($this->isSplitNeeded())
{
$this->split();
$this->addEntry($entry);
}
elseif(empty($entry['PRIORITY']))
{
if (!$this->partChanged)
{
$this->addHeader();
}
$this->putContents(
sprintf(
self::ENTRY_TPL,
Converter::getXmlConverter()->encode($entry['XML_LOC']),
Converter::getXmlConverter()->encode($entry['XML_LASTMOD'])
), self::APPEND
);
}
else
{
if (!$this->partChanged)
{
$this->addHeader();
}
$this->putContents(
sprintf(
self::ENTRY_TPL_PRIORITY,
Converter::getXmlConverter()->encode($entry['XML_LOC']),
Converter::getXmlConverter()->encode($entry['XML_LASTMOD']),
Converter::getXmlConverter()->encode($entry['PRIORITY'])
), self::APPEND
);
}
}
/*добавление ссылки инфоблока в карту, передача информации о приоритете*/
public function addIBlockEntry($url, $modifiedDate,$priority='')
{
$this->addEntry(array(
'XML_LOC' => $this->settings['PROTOCOL'].'://'.\CBXPunycode::toASCII($this->settings['DOMAIN'], $e = null).$url,
'XML_LASTMOD' => date('c', $modifiedDate - \CTimeZone::getOffset()),
'PRIORITY'=>$priority,
));
}
/*добавление ссылки файла в карту, передача информации о приоритете*/
public function addFileEntry(File $f,$priority='')
{
if($f->isExists() && !$f->isSystem())
{
$this->addEntry(array(
'XML_LOC' => $this->settings['PROTOCOL'].'://'.\CBXPunycode::toASCII($this->settings['DOMAIN'], $e = null).$this->getFileUrl($f),
'XML_LASTMOD' => date('c', $f->getModificationTime()),
'PRIORITY'=>$priority,
));
}
}
}
global $priority; //передаем правила заданные в начале
if(preg_match($arSitemap['SETTINGS']['FILE_MASK_REGEXP'], $dir['FILE'])) {
$f = new IO\File($dir['DATA']['PATH'], $arSitemap['SITE_ID']);
$sitemapFile->addFileEntry($f);
$NS['files_count']++;
}
if(preg_match($arSitemap['SETTINGS']['FILE_MASK_REGEXP'], $dir['FILE'])) {
$f = new IO\File($dir['DATA']['PATH'], $arSitemap['SITE_ID']);
$priorityFile='';
if($dirKey==='/index.php' && !empty($priority['MAIN'])){
$priorityFile=$priority['MAIN'];
}
$sitemapFile->addFileEntry($f,$priorityFile);
$NS['files_count']++;
}
/*элементы*/
$sitemapFile->addIBlockEntry($url, $elementLastmod);
/*категории*/
$sitemapFile->addIBlockEntry($url, $sectionLastmod);
/*для приоритета элементов*/
$priorityElement=($priority[$iblockId]['E']?$priority[$iblockId]['E']:'');
$sitemapFile->addIBlockEntry($url, $elementLastmod,$priorityElement);
/*для приоритета категорий*/
$priorityElement=($priority[$iblockId]['S']?$priority[$iblockId]['S']:'');
$sitemapFile->addIBlockEntry($url, $sectionLastmod,$priorityElement);