plugindev:event:generateurl

event_GenerateURL

(v3.23以降) Nucleus 内の各種リンクを生成します。
FancyURLモードの時のみ処理されます。

呼び出し元

globalfunctions.php 1324行目

		$manager->notify(
			'GenerateURL',
			array(
				'type' => $type,
				'params' => $params,
				'completed' => &$created,
				'url' => &$url
			)
		);

渡されるデータ内容

  • type – 作成する URL のタイプ
    「item」「member」「category」「archivelist」「archive」「blog」のいずれか
  • params – $itemid、$blogid 等の URL 生成に必要なパラメータ
  • completed – 呼び出し時には FALSE、プラグインで処理を完了した時に TRUE を代入して返す
  • url – event_GenarateURL ファンクション内で作成した URL を代入する

使用例

globalfunctions.php の該当部分がわかりやすいと思いますので function用にちょこっと書き換えて掲載します

function event_GenerateURL($data)
{
    global $CONF;
    // url already generated
    if ($data['completed']) return;
 
    switch ($data['type']) {
        case 'item':
            $url = $CONF['IndexURL'].'/'.$CONF['ItemKey'].'/'.$params['itemid'];
            break;
        case 'member':
            $url = $CONF['IndexURL'].'/'.$CONF['MemberKey'].'/'.$params['memberid'];
            break;
        case 'category':
            $url = $CONF['IndexURL'].'/'.$CONF['CategoryKey'].'/'.$params['catid'];
            break;
        case 'archivelist':
            if (!$params['blogid']) $params['blogid'] = $CONF['DefaultBlog'];
            $url = $CONF['IndexURL'].'/'.$CONF['ArchivesKey'].'/'.$params['blogid'];
            break;
        case 'archive':
            $url = $CONF['IndexURL'].'/'.$CONF['ArchiveKey'].'/'.$params['archive'];
            break;
        case 'blog':
            $url = $CONF['IndexURL'].'/'.$CONF['BlogKey'].'/'.$params['blogid'];
            break;
        }
        $data['url'] = addLinkParams($url, $params['extra']);
        $data['completed'] = TRUE;
        return $data;
}

これをサニタイズしてアイテム・カテゴリーなどをそれぞれ正しいブログの URL で生成する場合

function event_GenerateURL($data)
{
    global $CONF, $manager;
    // url already generated
    if ($data['completed']) return;
    $params = $data['params'];
 
    switch ($data['type']) {
        case 'item':
            $item_id = intval($params['itemid']);
            $blog_id = getBlogIDFromItemID($item_id);
            if ($blog_id == $CONF['DefaultBlog']) {
                $base_url = $CONF['IndexURL'];
            } else {
                $b =& $manager->getBlog($blog_id);
                $base_url = $b->getURL();
            }
            if (substr($base_url, -1) != '/') $base_url .= '/';
            $url = $base_url.$CONF['ItemKey'].'/'.$item_id;
            break;
        case 'member':
            $member_id = intval($params['memberid']);
            $url = $CONF['Self'].'/'.$CONF['MemberKey'].'/'.$member_id;
            break;
        case 'category':
            $cat_id = intval($params['catid']);
            $blog_id = getBlogIDFromCatID($cat_id);
            if ($blog_id == $CONF['DefaultBlog']) {
                $base_url = $CONF['IndexURL'];
            } else {
                $b =& $manager->getBlog($blog_id);
                $base_url = $b->getURL();
            }
            if (substr($base_url, -1) != '/') $base_url .= '/';
            $url = $base_url.$CONF['CategoryKey'].'/'.$cat_id;
            break;
        case 'archivelist':
            if (!$params['blogid']) {
                $blog_id = $CONF['DefaultBlog'];
            } else {
                $blog_id = intval($params['blogid']);
            }
            if ($blog_id == $CONF['DefaultBlog']) {
                $base_url = $CONF['IndexURL'];
            } else {
                $b =& $manager->getBlog($blog_id);
                $base_url = $b->getURL();
            }
            if (substr($base_url, -1) != '/') $base_url .= '/';
            $url = $base_url.$CONF['ArchivesKey'].'/'.$blog_id;
            break;
        case 'archive':
            $blog_id = intval($params['blogid']);
            if ($blog_id == $CONF['DefaultBlog']) {
                $base_url = $CONF['IndexURL'];
            } else {
                $b =& $manager->getBlog($blog_id);
                $base_url = $b->getURL();
            }
            sscanf($params['archive'], '%d-%d-%d', $y, $m, $d);
            if ($d) {
                $archive = sprintf('%4d-%2d-%2d', $y, $m, $d);
            } else {
                $archive = sprintf('%4d-%2d', $y, $m);
            }
            if (substr($base_url, -1) != '/') $base_url .= '/';
            $url = $base_url.$CONF['ArchiveKey'].'/'.$archive;
            break;
        case 'blog':
            $blog_id = intval($params['blogid']);
            if ($blog_id == $CONF['DefaultBlog']) {
                $base_url = $CONF['IndexURL'];
            } else {
                $b =& $manager->getBlog($blog_id);
                $base_url = $b->getURL();
            }
            if (substr($base_url, -1) != '/') $base_url .= '/';
            $url = $base_url;
            break;
        }
        $data['url'] = addLinkParams($url, $params['extra']);
        $data['completed'] = TRUE;
        return $data;
}

となります

 
plugindev/event/generateurl.txt · 最終更新: 2011/03/23 21:28 (外部編集)