您在這裡

Drupal中用module文件中的menu路徑來生成sitemap.xml

James Qi 在 2021年11月21日 - 22:46 發表

在剛剛寫的一篇博文《為網站添加圖片網站地圖》中我提到有三種辦法來實現:

  • 專門寫的php程序,與.htaccess的rewrite配合重寫網址(詳見《Drupal網站Views生成頁面的XML網站地圖構建》)
  • 用module文件中的menu路徑來生成(現在寫的這篇博客文章來介紹)
  • 用views中的xml views來生成(這個辦法我也再專門寫一篇博客文章來介紹)

其實用module文件中menu路徑來生成網址是Drupal的标準做法,我們用這種做法生成過普通html頁面以及png圖片頁面,最近還用這個辦法生成過svg圖片文件,隻要在調用的函數中使用header控制生成頁面的格式就可以。

下面是module文件中生成image-sitemap.xml的例子:

/**
 * menu定義
 * 并不是網頁中的菜單定義,而是路由定義、路徑定義,在module中定義新的頁面時使用
 */
function emoji_menu() {
  $items = array();
  ...
  //image sitemap
  $items['image-sitemap.xml'] = array (
    'title' => 'Image Sitemap',
    'page callback' => 'image_sitemap_xml',
    'access callback' => 'user_access',
    'access arguments' => array('access content'),
  );
  ...
}
/**
 * 函數:圖片站點地圖
 * @param: 無
 * @return: 圖片站點地圖xml代碼
 */
function image_sitemap_xml() {
  global $language;
  $language_code = $language->language;
  $server_name = $_SERVER['SERVER_NAME'];
  $start = '<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="https://'.$server_name.'/xml-image-sitemap.xsl"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
';
  $end = '</urlset>';
  $output = $start;
  $emoji_array = array(元素略...);
  foreach ($emoji_array as $key => $emoji) {
    $emoji_url = urlencode($emoji);
    $short_name = ...;
    $code_point = ...;

    $output .= "<url>\n";
    $output .= "  <loc>https://www.emojiall.com/$language_code/emoji/$emoji_url</loc>\n";
    //社交媒體分享圖片
    $output .= "  <image:image>\n";
    $output .= "    <image:loc>https://www.emojiall.com/social-media-share/$emoji_url.png</image:loc>\n";
    $output .= "    <image:title>$emoji - emojiall.com</image:title>\n";
    $output .= "    <image:caption>$short_name</image:caption>\n";
    $output .= "  </image:image>\n";
    //頭部svg圖片
    $output .= "  <image:image>\n";
    $output .= "    <image:loc>https://www.emojiall.com/en/header-svg/$emoji_url.svg</image:loc>\n";
    $output .= "    <image:title>$emoji $short_name SVG - emojiall.com</image:title>\n";
    $output .= "    <image:caption>$short_name $code_point</image:caption>\n";
    $output .= "  </image:image>\n";
    
    $output .= "</url>\n";
  }
  $output .= $end;
  header("Content-type: application/xml");
  print $output;
  return NULL;
}

上面的代碼中略去了少量具體值,不影響實質。

這樣就在一個Drupal 7網站中生成了一個可以訪問的圖片網站地圖。

 

回應

發表新回應

Plain text

  • 不允許使用 HTML 標籤。
  • 自動將網址與電子郵件地址轉變為連結。
  • 自動斷行和分段。