web-dev-qa-db-ja.com

言語スイッチャーから言語を非表示にする

Joomla言語切り替えモジュールについて質問があります。ウェブサイトで英語に切り替えるオプションを非表示にしたいのですが。英語のサイトはもう存在しないと書かれているので、英語を非公開にすることはできません。しかし、別のリンクからアクセスされるため、存在する必要があります。

enter image description here

2
Matthew
  1. ファイルmodules\mod_languages\tmpl\default.phptemplates\YOURTEMPLATE\html\mod_languages\default.phpにコピーして、言語モジュールのテンプレートオーバーライドを作成します。
  2. テンプレートオーバーライドで次の行を見つけます(Joomla 3.3では約32行目)。

    <li class="<?php echo $language->active ? 'lang-active' : '';?>" dir="<?php echo JLanguage::getInstance($language->lang_code)->isRTL() ? 'rtl' : 'ltr' ?>">
    

    これに置き換えます(echo $language->title_native;を追加):

    <li class="<?php echo $language->active ? 'lang-active' : ''; echo ' ' . $language->lang_code; ?>" dir="<?php echo JLanguage::getInstance($language->lang_code)->isRTL() ? 'rtl' : 'ltr' ?>">
    

    これにより、<li>タグに言語コードが追加され、<li class="active en-GB"...が提供され、CSSを使用して任意の言語をターゲットにできるようになります。

  3. 最後に、このコードをテンプレートのCSSスタイルシートに追加します(en-GBを非表示にする言語に置き換えます)。

    .en-GB {
        display: none!important;
    }
    
2
johanpw

Anibalの回答と、モジュールテンプレートのオーバーライドまたは代替レイアウトの作成方法に関するリンクをたどります...これは、languagesモジュールのテンプレートファイル内で使用できるコードの一部です。

モジュールのテンプレートは、言語の表示方法について、モジュールマネージャーで定義した設定をチェックしています。

コードの一部は次のとおりです:

    <?php if ($params->get('show_active', 0) || !$language->active):?>

        <li class="<?php echo $language->active ? 'lang-active' : '';?>" dir="<?php echo JLanguage::getInstance($language->lang_code)->isRTL() ? 'rtl' : 'ltr' ?>">
        <a href="<?php echo $language->link;?>">
        <?php if ($params->get('image', 1)):?>
            <?php echo JHtml::_('image', 'mod_languages/' . $language->image . '.gif', $language->title_native, array('title' => $language->title_native), true);?>
        <?php else : ?>

                <?php echo $params->get('full_name', 1) ? $language->title_native : strtoupper($language->sef);?>

        <?php endif; ?>
        </a>
        </li>
    <?php endif;?>
<?php endforeach;?>

Foreachループを使用して、利用可能なコンテンツ言語をループし、表示します。 foreachループ内で、その開始直後と終了前に、実行したコードを次のような条件チェックでラップできます。

これはforeachループの開始後に行われます。

<?php if ($language->lang_code != 'en-GB') {?>

これにより、メニューの言語が英語でない場合にのみ、言語メニューをレンダリングするコードが作成されます。

これは、foreachループが閉じる直前に、ifステートメントを閉じてラップします。

<?php } ?>

つまり、次のようなものになるはずです:

<?php foreach ($list as $language) : ?>
    <?php if ($language->lang_code != 'en-GB') {?> // Don't run if it's english.
    <?php if ($params->get('show_active', 0) || !$language->active):?>

        <li class="<?php echo $language->active ? 'lang-active' : '';?>" dir="<?php echo JLanguage::getInstance($language->lang_code)->isRTL() ? 'rtl' : 'ltr' ?>">
        <a href="<?php echo $language->link;?>">
        <?php if ($params->get('image', 1)):?>
            <?php echo JHtml::_('image', 'mod_languages/' . $language->image . '.gif', $language->title_native, array('title' => $language->title_native), true);?>
        <?php else : ?>

                <?php echo $params->get('full_name', 1) ? $language->title_native : strtoupper($language->sef);?>

        <?php endif; ?>
        </a>
        </li>
    <?php endif;?> 
            <?php } ?>

<?php endforeach;?>
1
FFrewin

必要な言語のみを表示して、新しいモジュールレイアウトを作成できます。

モジュール代替レイアウトhttp://docs.joomla.org/Layout_Overrides_in_Joomla#Module_Alternative_Layouts

0
Anibal