it-swarm.com.de

So erhalten Sie eine absolute URL mit einem anderen Domain-Sprachpräfix

Was ist der beste Weg, um eine absolute URL mit dem richtigen Sprachpräfix zu erhalten? Die Funktion url() akzeptiert Sprachparameter, scheint sie jedoch nicht zum Generieren des Präfixes zu verwenden, sondern nur zum Übersetzen des Alias. Aliase interessieren mich nicht - ich benötige das richtige Domain-Präfix.

Wenn ich auf http://en.example.com/something Bin und diesen Code benutze:

<?php
$all_languages = language_list();
url('something-else', array('language' => $all_languages['nl'], 'absolute' => true));
?>

Ich werde dies bekommen: http://en.example.com/something-else (en Präfix).

Wie kann ich das bekommen: http://nl.example.com/something-else (nl Präfix).

3
SiliconMind

Anscheinend erzeugt die Funktion url() Links wie http://nl.example.com/something-else (beachten Sie das Präfix nb) ABER nur für die Konfiguration bestimmter Sprachen. Dies funktioniert nur dann korrekt, wenn ich hier für jede Sprache die entsprechende Domain einstelle: /admin/config/regional/language.

Standardmäßig ist das Feld Pfadpräfix-Sprachcode auf Sprachcode ( nl eingestellt. ) in diesem Fall) und Die Sprachdomäne ist leer.

Jetzt, da ich das Präfix DOMAIN für die Sprachauswahl verwende, und nicht das Präfix PATH Dann sollte ich für jede Sprache die Sprachdomäne anstelle des Pfadpräfixes festlegen.

Aus irgendeinem Grund Drupal besteht darauf, nur eines dieser Felder auszufüllen, füllt jedoch standardmäßig den Sprachcode für den Pfadpräfix auch wenn die Spracherkennung auf domain eingestellt ist.

0
SiliconMind

Ich formatiere meine URLs so.

 $order_url = url('user/' . $params['order']->uid . '/orders/'. $params['order']->order_id, array(
'absolute' => TRUE, 
'language' => (object)array(
  'language' => 'lang-key',
)
  ));

Wir können sehen, dass sich dies in der URL-Funktion unten widerspiegelt.

$language = isset($options['language']) && isset($options['language']->language) ? $options['language']->language : '';
$alias = drupal_get_path_alias($original_path, $language);
if ($alias != $original_path) {
  $path = $alias;
}


}
0
Nicolas

Dies wurde aus meiner Themendatei gezogen, aber solange Sie Zugriff auf $ node und $ language haben, reicht es aus:

<?php
    if (isset($node))
    {
?>
<div class="language-switcher">
        <?php
            $nodes = translation_path_get_translations("node/" . $node->nid);
            $path  = "";
            if ($language->language == "en")
            {
                if (array_key_exists("nl", $nodes))
                {
                    $path = drupal_get_path_alias($nodes["nl"], "nl");
                }
        ?>
        <a href="http://nl.example.com/<?php print $path; ?>">Change to NL</a>
        <?php
            }
            else
            {
                if (array_key_exists("en", $nodes))
                {
                    $path = drupal_get_path_alias($nodes["en"], "en");
                }
        ?>
        <a href="http://en.example.com/<?php print $path; ?>">Change to EN</a>
        <?php
            }
        ?>
</div>
<?php
    }
?>

Die URLs sind mit den berechneten Pfadinformationen fest codiert.

0
Scott Joudry