Bitrix-D7  20.0.0
Класс SitemapFile
Граф наследования:SitemapFile:
File FileEntry IFileStream FileSystemEntry SitemapIndex SitemapRuntime

Открытые члены

 __construct ($fileName, $settings)
 
 addHeader ()
 Adds header to the current sitemap file. Подробнее...
 
 addEntry ($entry)
 Adds new entry to the current sitemap file. Подробнее...
 
 split ()
 Creates next sitemap file part. Подробнее...
 
 getNameList ()
 Returns list of file parts. Подробнее...
 
 getPathDirectory ()
 Divide path to directory and filemname. Подробнее...
 
 isNotEmpty ()
 Returns if the whole sitemap is empty (not only current part). Подробнее...
 
 isCurrentPartNotEmpty ()
 Returns if current sitemap part contains something besides header. Подробнее...
 
 appendEntry ($entry)
 Appends new entry to the existing and finished sitemap file. Подробнее...
 
 removeEntry ($url)
 Searches and removes entry to the existing and finished sitemap file. Подробнее...
 
 addFileEntry (File $f)
 Adds new file entry to the current sitemap. Подробнее...
 
 addIBlockEntry ($url, $modifiedDate)
 Adds new IBlock entry to the current sitemap. Подробнее...
 
 appendIBlockEntry ($url, $modifiedDate)
 Appends new IBlock entry to the existing finished sitemap. Подробнее...
 
 addFooter ()
 Adds footer to the current sitemap part. Подробнее...
 
 getSiteRoot ()
 Returns sitemap site root. Подробнее...
 
 getUrl ()
 Returns sitemap file URL. Подробнее...
 
 parse ()
 Parses sitemap file. Подробнее...
 
- Открытые члены унаследованные от File
 open ($mode)
 Opens the file and returns the file pointer. Подробнее...
 
 close ()
 Closes the file. Подробнее...
 
 isExists ()
 
 getContents ()
 
 putContents ($data, $flags=self::REWRITE)
 
 getSize ()
 Returns the file size. Подробнее...
 
 seek ($position)
 Seeks on the file pointer from the beginning (SEEK_SET only). Подробнее...
 
 isWritable ()
 
 isReadable ()
 
 readFile ()
 
 getCreationTime ()
 
 getLastAccessTime ()
 
 getModificationTime ()
 
 markWritable ()
 
 getPermissions ()
 
 delete ()
 
 getContentType ()
 
- Открытые члены унаследованные от FileEntry
 getExtension ()
 
 putContents ($data)
 
 getFileSize ()
 
 isDirectory ()
 
 isFile ()
 
 isLink ()
 
- Открытые члены унаследованные от FileSystemEntry
 isSystem ()
 
 getName ()
 
 getDirectoryName ()
 
 getPath ()
 
 getDirectory ()
 
 getPhysicalPath ()
 
 rename ($newPath)
 

Поля данных

const XML_HEADER = '<?xml version="1.0" encoding="UTF-8"?>'
 
const FILE_HEADER = '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'
 
const FILE_FOOTER = '</urlset>'
 
const ENTRY_TPL = '<url><loc>%s</loc><lastmod>%s</lastmod></url>'
 
const ENTRY_TPL_SEARCH = '<url><loc>%s</loc>'
 
const XPATH_URL = '/urlset/url'
 
const MAX_SIZE = 5000000
 
const FILE_EXT = '.xml'
 
const FILE_PART_SUFFIX = '.part'
 
- Поля данных унаследованные от File
const REWRITE = 0
 
const APPEND = 1
 

Защищенные члены

 prepareFileName ($fileName)
 
 reInit ($fileName)
 Reinitializes current object with new file name. Подробнее...
 
 isSplitNeeded ()
 Checks is it needed to create new part of sitemap file. Подробнее...
 
 getFileUrl (File $f)
 Returns file relative path for URL. Подробнее...
 

Защищенные данные

 $documentRoot
 
 $settings = array()
 
 $parser = false
 
 $siteRoot = ''
 
 $partFile = ''
 
 $partList = array()
 
 $part = 0
 
 $partChanged = false
 
 $footerClosed = false
 
 $urlToSearch = ''
 
 $urlFound = false
 
- Защищенные данные унаследованные от File
 $filePointer
 
- Защищенные данные унаследованные от FileSystemEntry
 $path
 
 $originalPath
 
 $pathPhysical
 
 $siteId
 

Дополнительные унаследованные члены

- Открытые статические члены унаследованные от File
static isFileExists ($path)
 
static getFileContents ($path)
 
static putFileContents ($path, $data, $flags=self::REWRITE)
 
static deleteFile ($path)
 
- Защищенные статические члены унаследованные от FileSystemEntry
static getDocumentRoot ($siteId)
 

Подробное описание

См. определение в файле sitemapfile.php строка 20

Конструктор(ы)

◆ __construct()

__construct (   $fileName,
  $settings 
)

Переопределяет метод предка File.

См. определение в файле sitemapfile.php строка 52

53  {
54  $this->settings = array(
55  'SITE_ID' => $settings['SITE_ID'],
56  'PROTOCOL' => $settings['PROTOCOL'] == 'https' ? 'https' : 'http',
57  'DOMAIN' => $settings['DOMAIN'],
58  );
59 
60  $site = SiteTable::getRow(array("filter" => array("LID" => $this->settings['SITE_ID'])));
61 
62  $this->documentRoot = SiteTable::getDocumentRoot($this->settings['SITE_ID']);
63  $this->footerClosed = false;
64 
65  $this->siteRoot = Path::combine(
66  $this->documentRoot,
67  $site['DIR']
68  );
69 
70  $fileName = $this->prepareFileName($fileName);
71  $this->partFile = $this->partFile ? $fileName : $this->partFile;
72  $this->pathPhysical = null; // hack for object reconstuct during file splitting
73  parent::__construct($this->siteRoot.'/'.$fileName, $this->settings['SITE_ID']);
74  $this->partChanged = $this->isExists() && !$this->isSplitNeeded();
75  }

Методы

◆ addEntry()

addEntry (   $entry)

Adds new entry to the current sitemap file.

Entry array keys XML_LOC - loc field value XML_LASTMOD - lastmod field value

Аргументы
array$entryEntry array.
Возвращает
void

См. определение в файле sitemapfile.php строка 135

136  {
137  if ($this->isSplitNeeded())
138  {
139  $this->split();
140  $this->addEntry($entry);
141  }
142  else
143  {
144  if (!$this->partChanged)
145  {
146  $this->addHeader();
147  }
148 
149  $this->putContents(
150  sprintf(
151  self::ENTRY_TPL,
152  Converter::getXmlConverter()->encode($entry['XML_LOC']),
153  Converter::getXmlConverter()->encode($entry['XML_LASTMOD'])
154  ), self::APPEND
155  );
156  }
157  }

◆ addFileEntry()

addFileEntry ( File  $f)

Adds new file entry to the current sitemap.

Аргументы
File$fFile to add.
Возвращает
void
Исключения

См. определение в файле sitemapfile.php строка 340

341  {
342  if($f->isExists() && !$f->isSystem())
343  {
344  $this->addEntry(array(
345  'XML_LOC' => $this->settings['PROTOCOL'].'://'.\CBXPunycode::toASCII($this->settings['DOMAIN'], $e = null).$this->getFileUrl($f),
346  'XML_LASTMOD' => date('c', $f->getModificationTime()),
347  ));
348  }
349  }

◆ addFooter()

addFooter ( )

Adds footer to the current sitemap part.

Возвращает
void

См. определение в файле sitemapfile.php строка 397

398  {
399  $this->putContents(self::FILE_FOOTER, self::APPEND);
400  $this->footerClosed = true;
401  }

◆ addHeader()

addHeader ( )

Adds header to the current sitemap file.

Возвращает
void

См. определение в файле sitemapfile.php строка 107

108  {
109  $this->partChanged = true;
110  $this->putContents(self::XML_HEADER.self::FILE_HEADER);
111  }

◆ addIBlockEntry()

addIBlockEntry (   $url,
  $modifiedDate 
)

Adds new IBlock entry to the current sitemap.

Аргументы
string$urlIBlock entry URL.
string$modifiedDateIBlock entry modify timestamp.
Возвращает
void

См. определение в файле sitemapfile.php строка 359

360  {
361  $this->addEntry(array(
362  'XML_LOC' => $this->settings['PROTOCOL'].'://'.\CBXPunycode::toASCII($this->settings['DOMAIN'], $e = null).$url,
363  'XML_LASTMOD' => date('c', $modifiedDate - \CTimeZone::getOffset()),
364  ));
365  }

◆ appendEntry()

appendEntry (   $entry)

Appends new entry to the existing and finished sitemap file.

Entry array keys XML_LOC - loc field value XML_LASTMOD - lastmod field value

Аргументы
array$entryEntry array.
Возвращает
void

См. определение в файле sitemapfile.php строка 247

248  {
249  if($this->isSplitNeeded())
250  {
251  $this->split();
252  $this->appendEntry($entry);
253  }
254  else
255  {
256  if(!$this->partChanged)
257  {
258  $this->addHeader();
259  $offset = $this->getSize();
260  }
261  else
262  {
263  $offset = $this->getSize()-strlen(self::FILE_FOOTER);
264  }
265 
266  $fd = $this->open('r+');
267 
268  fseek($fd, $offset);
269  fwrite($fd, sprintf(
270  self::ENTRY_TPL,
271  Converter::getXmlConverter()->encode($entry['XML_LOC']),
272  Converter::getXmlConverter()->encode($entry['XML_LASTMOD'])
273  ).self::FILE_FOOTER);
274  fclose($fd);
275 
276  $this->footerClosed = true;
277  }
278  }

◆ appendIBlockEntry()

appendIBlockEntry (   $url,
  $modifiedDate 
)

Appends new IBlock entry to the existing finished sitemap.

Аргументы
string$urlIBlock entry URL.
string$modifiedDateIBlock entry modify timestamp.
Возвращает
void

Переопределяется в SitemapRuntime.

См. определение в файле sitemapfile.php строка 375

376  {
377  if($this->isExists())
378  {
379  $this->appendEntry(array(
380  'XML_LOC' => $this->settings['PROTOCOL'].'://'.\CBXPunycode::toASCII($this->settings['DOMAIN'], $e = null).$url,
381  'XML_LASTMOD' => date('c', $modifiedDate - \CTimeZone::getOffset()),
382  ));
383  }
384  else
385  {
386  $this->addHeader();
387  $this->addIBlockEntry($url, $modifiedDate);
388  $this->addFooter();
389  }
390  }

◆ getFileUrl()

getFileUrl ( File  $f)
protected

Returns file relative path for URL.

Аргументы
File$fFile object.
Возвращает
string

См. определение в файле sitemapfile.php строка 450

451  {
452  static $indexNames;
453  if(!is_array($indexNames))
454  {
455  $indexNames = GetDirIndexArray();
456  }
457 
458  $documentRoot = Path::normalize($this->documentRoot);
459  $path = '/';
460  if (substr($this->path, 0, strlen($documentRoot)) === $documentRoot)
461  {
462  $path = '/'.substr($f->getPath(), strlen($documentRoot));
463  }
464 
466 
467  $path = in_array($f->getName(), $indexNames)
468  ? str_replace('/'.$f->getName(), '/', $path)
469  : $path;
470 
471  return '/'.ltrim($path, '/');
472  }

◆ getNameList()

getNameList ( )

Returns list of file parts.

Возвращает
array

См. определение в файле sitemapfile.php строка 189

190  {
191  return $this->isCurrentPartNotEmpty() ? array_merge($this->partList, array($this->getName())) : $this->partList;
192  }

◆ getPathDirectory()

getPathDirectory ( )

Divide path to directory and filemname.

Возвращает
array

См. определение в файле sitemapfile.php строка 198

199  {
200 // normalize slashes
201  $siteRoot = Path::normalize($this->siteRoot);
202  $fileName = $this->getName();
203  $path = Path::normalize($this->path);
204 
205  $directory = str_replace(array($siteRoot, $fileName), array('',''), $path);
206 
207  return ltrim($directory, '/');
208  }

◆ getSiteRoot()

getSiteRoot ( )

Returns sitemap site root.

Возвращает
mixed|string

См. определение в файле sitemapfile.php строка 408

409  {
410  return $this->siteRoot;
411  }

◆ getUrl()

getUrl ( )

Returns sitemap file URL.

Возвращает
string

См. определение в файле sitemapfile.php строка 418

419  {
420  return $this->settings['PROTOCOL'].'://'.\CBXPunycode::toASCII($this->settings['DOMAIN'], $e = null).$this->getFileUrl($this);
421  }

◆ isCurrentPartNotEmpty()

isCurrentPartNotEmpty ( )

Returns if current sitemap part contains something besides header.

Возвращает
bool

См. определение в файле sitemapfile.php строка 225

226  {
227  if($this->isExists())
228  {
229  $c = $this->getContents();
230  return strlen($c) > 0 && $c != self::XML_HEADER.self::FILE_HEADER;
231  }
232 
233  return false;
234  }

◆ isNotEmpty()

isNotEmpty ( )

Returns if the whole sitemap is empty (not only current part).

Возвращает
bool

См. определение в файле sitemapfile.php строка 215

216  {
217  return (count($this->partList) > 0) || $this->isCurrentPartNotEmpty();
218  }

◆ isSplitNeeded()

isSplitNeeded ( )
protected

Checks is it needed to create new part of sitemap file.

Возвращает
bool
Исключения

См. определение в файле sitemapfile.php строка 119

120  {
121  return $this->isExists() && $this->getSize() >= self::MAX_SIZE;
122  }

◆ parse()

parse ( )

Parses sitemap file.

Возвращает
bool|\CDataXML
Исключения

См. определение в файле sitemapfile.php строка 429

430  {
431  if(!$this->parser)
432  {
433  if($this->isExists())
434  {
435  $this->parser = new \CDataXML();
436  $this->parser->loadString($this->getContents());
437  }
438  }
439 
440  return $this->parser;
441  }

◆ prepareFileName()

prepareFileName (   $fileName)
protected

См. определение в файле sitemapfile.php строка 77

78  {
79  // normalize slashes
80  $fileName = Path::normalize($fileName);
81  if (substr($fileName, -strlen(self::FILE_EXT)) != self::FILE_EXT)
82  {
83  $fileName .= self::FILE_EXT;
84  }
85 
86  // convert words delimiter, google dont't like '_''
87  $fileName = str_replace('_', '-', $fileName);
88 
89  return $fileName;
90  }

◆ reInit()

reInit (   $fileName)
protected

Reinitializes current object with new file name.

Аргументы
string$fileNameNew file name.

Переопределяется в SitemapRuntime.

См. определение в файле sitemapfile.php строка 97

98  {
99  $this->__construct($fileName, $this->settings);
100  }

◆ removeEntry()

removeEntry (   $url)

Searches and removes entry to the existing and finished sitemap file.

Entry array keys XML_LOC - loc field value XML_LASTMOD - lastmod field value

Аргументы
string$urlEntry URL.
Возвращает
string

См. определение в файле sitemapfile.php строка 291

292  {
293  $fileName = $this->partFile;
294  $url = $this->settings['PROTOCOL'] . '://' . \CBXPunycode::toASCII($this->settings['DOMAIN'], $e = NULL) . $url;
295  $pattern = sprintf(self::ENTRY_TPL_SEARCH, $url);
296 
297  while($this->isExists())
298  {
299  $c = $this->getContents();
300  $p = strpos($c, $pattern);
301  unset($c);
302 
303  if($p !== false)
304  {
305  $fd = $this->open('r+');
306 
307  fseek($fd, intval($p));
308  fwrite($fd, str_repeat(" ", strlen(sprintf(
309  self::ENTRY_TPL,
310  Converter::getXmlConverter()->encode($url),
311  Converter::getXmlConverter()->encode(date('c'))
312  ))));
313  fclose($fd);
314  break;
315  }
316 
317  if(!$this->isSplitNeeded())
318  {
319  break;
320  }
321  else
322  {
323  $this->part++;
324  $fileName = substr($fileName, 0, -strlen(self::FILE_EXT)) . self::FILE_PART_SUFFIX . $this->part . substr($fileName, -strlen(self::FILE_EXT));
325  $this->reInit($fileName);
326  }
327  }
328 
329  return $fileName;
330  }

◆ split()

split ( )

Creates next sitemap file part.

Returns new part file name.

Возвращает
string

См. определение в файле sitemapfile.php строка 164

165  {
166  if($this->partChanged)
167  {
168  $this->addFooter();
169  }
170 
171  $this->partList[] = $this->getName();
172  $this->part++;
173 
174  $fileName = $this->partFile;
175  $fileName = substr($fileName, 0, -strlen(self::FILE_EXT)).self::FILE_PART_SUFFIX.$this->part.substr($fileName, -strlen(self::FILE_EXT));
176 
177  $this->reInit($fileName);
178 
179  $this->partChanged = $this->isExists() && !$this->isSplitNeeded();
180 
181  return $fileName;
182  }

Поля

◆ $documentRoot

$documentRoot
protected

См. определение в файле sitemapfile.php строка 38

◆ $footerClosed

$footerClosed = false
protected

См. определение в файле sitemapfile.php строка 47

◆ $parser

$parser = false
protected

См. определение в файле sitemapfile.php строка 40

◆ $part

$part = 0
protected

См. определение в файле sitemapfile.php строка 45

◆ $partChanged

$partChanged = false
protected

См. определение в файле sitemapfile.php строка 46

◆ $partFile

$partFile = ''
protected

См. определение в файле sitemapfile.php строка 43

◆ $partList

$partList = array()
protected

См. определение в файле sitemapfile.php строка 44

◆ $settings

$settings = array()
protected

См. определение в файле sitemapfile.php строка 39

◆ $siteRoot

$siteRoot = ''
protected

См. определение в файле sitemapfile.php строка 42

◆ $urlFound

$urlFound = false
protected

См. определение в файле sitemapfile.php строка 50

◆ $urlToSearch

$urlToSearch = ''
protected

См. определение в файле sitemapfile.php строка 49

◆ ENTRY_TPL

const ENTRY_TPL = '<url><loc>%s</loc><lastmod>%s</lastmod></url>'

См. определение в файле sitemapfile.php строка 28

◆ ENTRY_TPL_SEARCH

const ENTRY_TPL_SEARCH = '<url><loc>%s</loc>'

См. определение в файле sitemapfile.php строка 29

◆ FILE_EXT

const FILE_EXT = '.xml'

См. определение в файле sitemapfile.php строка 35

◆ FILE_FOOTER

const FILE_FOOTER = '</urlset>'

См. определение в файле sitemapfile.php строка 26

◆ FILE_HEADER

const FILE_HEADER = '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'

См. определение в файле sitemapfile.php строка 25

◆ FILE_PART_SUFFIX

const FILE_PART_SUFFIX = '.part'

См. определение в файле sitemapfile.php строка 36

◆ MAX_SIZE

const MAX_SIZE = 5000000

См. определение в файле sitemapfile.php строка 33

◆ XML_HEADER

const XML_HEADER = '<?xml version="1.0" encoding="UTF-8"?>'

См. определение в файле sitemapfile.php строка 23

◆ XPATH_URL

const XPATH_URL = '/urlset/url'

См. определение в файле sitemapfile.php строка 31


Объявления и описания членов класса находятся в файле:
Bitrix\Main\SiteTable\getDocumentRoot
static getDocumentRoot($siteId=null)
Definition: main/lib/site.php:16
Bitrix\Seo\SitemapFile\MAX_SIZE
const MAX_SIZE
Definition: sitemapfile.php:33
Bitrix\Seo\SitemapFile\isSplitNeeded
isSplitNeeded()
Checks is it needed to create new part of sitemap file.
Definition: sitemapfile.php:119
Bitrix\Main\IO\Path\convertLogicalToUri
static convertLogicalToUri($path)
Definition: main/lib/io/path.php:142
Bitrix\Main\ORM\Data\DataManager\getRow
static getRow(array $parameters)
Returns one row (or null) by parameters for getList()
Definition: main/lib/orm/data/datamanager.php:407
Bitrix\Seo\SitemapFile\addHeader
addHeader()
Adds header to the current sitemap file.
Definition: sitemapfile.php:107
Bitrix\Main\IO\FileSystemEntry\$path
$path
Definition: filesystementry.php:8
Bitrix\Main\IO\File\open
open($mode)
Opens the file and returns the file pointer.
Definition: main/lib/io/file.php:26
Bitrix\Main\IO\File\isExists
isExists()
Definition: main/lib/io/file.php:51
Bitrix\Seo\SitemapFile\split
split()
Creates next sitemap file part.
Definition: sitemapfile.php:164
Bitrix\Seo\SitemapFile\prepareFileName
prepareFileName($fileName)
Definition: sitemapfile.php:77
Bitrix\Main\IO\Path\normalize
static normalize($path)
Definition: main/lib/io/path.php:26
Bitrix\Main\IO\Path\combine
static combine()
Definition: main/lib/io/path.php:221
Bitrix\Seo\SitemapFile\isCurrentPartNotEmpty
isCurrentPartNotEmpty()
Returns if current sitemap part contains something besides header.
Definition: sitemapfile.php:225
Bitrix\Seo\SitemapFile\addFooter
addFooter()
Adds footer to the current sitemap part.
Definition: sitemapfile.php:397
Bitrix\Seo\SitemapFile\getFileUrl
getFileUrl(File $f)
Returns file relative path for URL.
Definition: sitemapfile.php:450
Bitrix\Seo\SitemapFile\$documentRoot
$documentRoot
Definition: sitemapfile.php:38
Bitrix\Main\IO\File\getContents
getContents()
Definition: main/lib/io/file.php:57
Bitrix\Seo\SitemapFile\FILE_EXT
const FILE_EXT
Definition: sitemapfile.php:35
Bitrix\Seo\SitemapFile\reInit
reInit($fileName)
Reinitializes current object with new file name.
Definition: sitemapfile.php:97
Bitrix\Seo\SitemapFile\addIBlockEntry
addIBlockEntry($url, $modifiedDate)
Adds new IBlock entry to the current sitemap.
Definition: sitemapfile.php:359
Bitrix\Seo\SitemapFile\__construct
__construct($fileName, $settings)
Definition: sitemapfile.php:52
Bitrix\Seo\SitemapFile\appendEntry
appendEntry($entry)
Appends new entry to the existing and finished sitemap file.
Definition: sitemapfile.php:247
Bitrix\Main\IO\File\getSize
getSize()
Returns the file size.
Definition: main/lib/io/file.php:86
Bitrix\Sender\Connector\__construct
__construct(Base $connector)
Constructor.
Definition: resultview.php:40
Bitrix\Main\Text\Converter\getXmlConverter
static getXmlConverter()
Definition: main/lib/text/converter.php:20
Bitrix\Seo\SitemapFile\$parser
$parser
Definition: sitemapfile.php:40
Bitrix\Seo\SitemapFile\$settings
$settings
Definition: sitemapfile.php:39
Bitrix\Main\IO\File\putContents
putContents($data, $flags=self::REWRITE)
Definition: main/lib/io/file.php:65
Bitrix\Seo\SitemapFile\addEntry
addEntry($entry)
Adds new entry to the current sitemap file.
Definition: sitemapfile.php:135
Bitrix\Seo\SitemapFile\$partFile
$partFile
Definition: sitemapfile.php:43
Bitrix\Seo\SitemapFile\$siteRoot
$siteRoot
Definition: sitemapfile.php:42
Bitrix\Main\IO\FileSystemEntry\getName
getName()
Definition: filesystementry.php:56