- Модуль: seo
- Путь к файлу: ~/bitrix/modules/seo/lib/Sitemap/Generator.php
- Класс: BitrixSeoSitemapGenerator
- Вызов: Generator::processDirectory
protected function processDirectory($dirData, FileBase $sitemapFile): void
{
$processedDirs = [];
if ($dirData['ACTIVE'] == RuntimeTable::ACTIVE)
{
$directories = CSeoUtils::getDirStructure(
$this->sitemapData['SETTINGS']['logical'] == 'Y',
$this->sitemapData['SITE_ID'],
$dirData['ITEM_PATH']
);
foreach ($directories as $dir)
{
$dirKey = "/" . ltrim($dir['DATA']['ABS_PATH'], "/");
if ($dir['TYPE'] == 'F')
{
if (
!isset($this->sitemapData['SETTINGS']['FILE'][$dirKey])
|| $this->sitemapData['SETTINGS']['FILE'][$dirKey] == 'Y'
)
{
if (preg_match($this->sitemapData['SETTINGS']['FILE_MASK_REGEXP'], $dir['FILE']))
{
$f = new IOFile($dir['DATA']['PATH'], $this->sitemapData['SITE_ID']);
$sitemapFile->addFileEntry($f);
}
}
}
else
{
if (!isset($this->sitemapData['SETTINGS']['DIR'][$dirKey])
|| $this->sitemapData['SETTINGS']['DIR'][$dirKey] == 'Y')
{
$processedDirs[] = $dirKey;
}
}
}
}
else
{
$len = mb_strlen($dirData['ITEM_PATH']);
if (!empty($this->sitemapData['SETTINGS']['DIR']))
{
foreach ($this->sitemapData['SETTINGS']['DIR'] as $dirKey => $checked)
{
if ($checked == 'Y')
{
if (strncmp($dirData['ITEM_PATH'], $dirKey, $len) === 0)
{
$processedDirs[] = $dirKey;
}
}
}
}
if (!empty($this->sitemapData['SETTINGS']['FILE']))
{
foreach ($this->sitemapData['SETTINGS']['FILE'] as $dirKey => $checked)
{
if ($checked == 'Y')
{
if (strncmp($dirData['ITEM_PATH'], $dirKey, $len) === 0)
{
$fileName = IOPath::combine(
SiteTable::getDocumentRoot($this->sitemapData['SITE_ID']),
$dirKey
);
if (!is_dir($fileName))
{
$f = new IOFile($fileName, $this->sitemapData['SITE_ID']);
if (
$f->isExists()
&& !$f->isSystem()
&& preg_match($this->sitemapData['SETTINGS']['FILE_MASK_REGEXP'], $f->getName())
)
{
$sitemapFile->addFileEntry($f);
}
}
}
}
}
}
}
if (count($processedDirs) > 0)
{
foreach ($processedDirs as $dirKey)
{
$runtimeData = [
'PID' => $this->sitemapId,
'ITEM_PATH' => $dirKey,
'PROCESSED' => RuntimeTable::UNPROCESSED,
'ACTIVE' => RuntimeTable::ACTIVE,
'ITEM_TYPE' => RuntimeTable::ITEM_TYPE_DIR,
];
RuntimeTable::add($runtimeData);
}
}
RuntimeTable::update($dirData['ID'], [
'PROCESSED' => RuntimeTable::PROCESSED,
]);
}