4

Joomlaのテンプレートにボックスを作成しようとしています!すべてのキーワードが表示され、適切な検索ページにリンクされます。メニュー項目を設定しましたが、メニュー項目をテンプレートにハードコーディングしたくないので、JRouteオブジェクトを使用してSEFURLを生成します。

私はこの関数を使用しています:

JRoute::_('index.php?option=com_search&searchword='.$keyword);

またはこれ:

JRoute::_('index.php?option=com_search&view=search&searchword='.$keyword);

ただし、これにより次のようなURLが生成されます。

/component/search/?searchword=africa

次のような検索URLを作成する必要がある場合:

/searchmenuitem?searchword=africa

私はオンラインで広範囲に検索しましたが、この問題の解決策は見つかりませんでした。任意のアイデアをいただければ幸いです。

さて、あなたのためにいくつかの追加情報があります。com_contentのテンプレートからURLをルーティングしようとしたときにのみ問題が発生します。com_searchのテンプレートからURLをルーティングしようとすると、すべてが完全に機能します。では、これが正しく機能しない原因となっているcom_contentについてはどうでしょうか。

ありがとう!デビッド

4

3 に答える 3

4

joomla管理ページで、検索結果ページ用に選択したメニュー項目に移動し、そのメニュー項目のID(itemId)を取得します。

あなたが使用してみることができるより:

JRoute::_('index.php?option=com_search&view=search&Itemid=256&searchword=asdsadasdsa');

あるいは

JRoute::_('index.php?Itemid=256&searchword=asdsadasdsa');

どちらも次のようになります。/searchmenuitem.html?searchword=asdsadasdsa

編集: それをより快適にするために、あなたはあなたのテンプレートにパラメータとしてitemIdを追加することができます。

uがデータベースからitemIdを取得できる別の方法があります(このメソッドは多言語のWebサイトで必要です)。よろしければお知らせください。

EDIT2: ここにあります:

$db   =& JFactory::getDBO();
$lang =& JFactory::getLanguage()->getTag();
$uri  = 'index.php?option=com_search&view=search';

$db->setQuery('SELECT id FROM #__menu WHERE link LIKE '. $db->Quote( $uri .'%' ) .' AND language='. $db->Quote($lang) .' LIMIT 1' );

$itemId = ($db->getErrorNum())? 0 : intval($db->loadResult());
于 2011-08-11T01:15:28.730 に答える
1

この種のメソッドを使用して、特定のコンポーネントとビューのメニュー項目IDを取得します

 function getSearchItemId() {

        $menu = &JSite::getMenu();
        $component = &JComponentHelper::getComponent('com_search');
        //get only com_search menu items
            $items  = $menu->getItems('componentid', $component->id);

        foreach ($items as $item) {
            if (isset($item->query['view']) && $item->query['view'] === 'search') {
                        return $item->id;

                    }
        }

        return false;

        }

次に、このメソッドを使用してsefurlを取得します

関数getRouteUrl($ route){

    jimport('joomla.application.router');

    // Get the global site router.
    $config = &JFactory::getConfig();
    $router = JRouter::getInstance('site');
    $router->setMode($config->getValue('sef', 1));

    $uri    = &$router->build($url);
    $path   = $uri->toString(array('path', 'query', 'fragment'));

    return $path;
}

これはどのテンプレートでも機能します。

このように使用する

$itemid = getSearchItemId();

//returns valid sef url
$url = getRouteUrl('index.php?Itemid='.$itemid);

IDを取得するためにメニューテーブルでSQLを実行する必要はありません。メニューオブジェクトを検索するだけです。

于 2012-01-12T07:22:05.897 に答える
0

たとえば「hidden-menu」と呼ばれるjoomlaバックエンドで新しいメニューを作成してみてください。前面に表示されることはありません。ただし、これはによって使用されます。JRoute次に、このメニューに「searchmenuitem」という名前の新しいmenuitemをにリンクして追加しますcom_search。以上です。今、あなたは呼び出すことができます

JRoute::_('index.php?option=com_search&view=search&searchword=asdsadasdsa');

そしてそれはこれに変換されます

/searchmenuitem.html?searchword=asdsadasdsa
于 2011-07-27T17:44:50.707 に答える