Как сделать корневой индекс в карте сайта приоритетом 1,0, а остальные файлы подкаталогов — 0,5?
Я использую этот php-код для создания моей карты сайта на лету при доступе к странице.
Как и сейчас, приоритет отдается заданному значению
$url -> appendChild( $priority = $xml->createElement('priority', '0.5') );
для каждого URL в карте сайта, как в этом примере:
PHP-код, который создает карту сайта:
<?
$ignore = array( 'images', 'css', 'includes', 'cgi-bin', 'xml-sitemap.php' );
function getFileList($dir, $recurse=false) {
global $ignore;
$retval = array();
// open pointer to directory and read list of files
$d = @dir($dir) or die("getFileList: Failed opening directory $dir for reading");
while ( false !== ( $entry = $d->read() ) ) {
// Check if this dir needs to be ignored, if so, skip it.
if ( in_array( utf8_encode( $entry ), $ignore ) )
continue;
// skip hidden files
if($entry[0] == ".") continue;
if(is_dir("$dir$entry")) {
$retval[] = array(
"name" => "$dir$entry/",
"type" => filetype("$dir$entry"),
"size" => 0,
"lastmod" => filemtime("$dir$entry")
);
if($recurse && is_readable("$dir$entry/")) {
$retval = array_merge($retval, getFileList("$dir$entry/", true));
}
} elseif(is_readable("$dir$entry")) {
$retval[] = array(
"name" => str_replace('./','/', $dir),
"type" => mime_content_type("$dir$entry"),
"size" => filesize("$dir$entry"),
"lastmod" => filemtime("$dir$entry")
);
}
}
$d->close();
return $retval;
}
$dirlist = getFileList("./", true);
// sitemap creation
$time = time();
$sitemap = $_SERVER['DOCUMENT_ROOT'].'/sitemap.xml';
if ($time - filemtime($sitemap) >= 1) { // 1 days
$xml = new DomDocument('1.0', 'utf-8');
$xml->formatOutput = true;
// creating base node
$urlset = $xml->createElement('urlset');
$urlset -> appendChild(
new DomAttr('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9')
);
// appending it to document
$xml -> appendChild($urlset);
// building the xml document with your website content
foreach($dirlist as $file)
{
if($file['type'] != 'text/x-php') continue;
//Creating single url node
$url = $xml->createElement('url');
//Filling node with entry info
$url -> appendChild( $xml->createElement('loc', 'http://www.airsahara.in'.$file['name']) );
$url -> appendChild( $lastmod = $xml->createElement('lastmod', date('Y-m-d', $file['lastmod'])) );
$url -> appendChild( $changefreq = $xml->createElement('changefreq', 'monthly') );
$url -> appendChild( $priority = $xml->createElement('priority', '0.5') );
// append url to urlset node
$urlset -> appendChild($url);
}
$xml->save($sitemap);
} // if time?>
Я отвечаю на свой вопрос, потому что я понял это.
Я просто сделал это. Я взял эту строку кода и расширил ее оператором if и else.
пошел от этого
$url -> appendChild( $priority = $xml->createElement('priority', '0.5') );
к этому
if($file['name'] != '/') {
$url -> appendChild( $priority = $xml->createElement('priority', '0.5') );
} else {
$url -> appendChild( $priority = $xml->createElement('priority', '1.0') );
}
Обновить: Согласно комментариям Хакре
if ($file['name'] != '/') {
$p = '0.5';
} else {
$p = '1.0';
}
$url -> appendChild( $priority = $xml->createElement('priority', $p) );
И это было бы сокращение от оператора if else
$file['name'] != '/' ? $p = '0.5' : $p = '1.0';
$url -> appendChild( $priority = $xml->createElement('priority', $p) );
Других решений пока нет …