Pregunta

He creado un Link DataObject para permitir que los usuarios creen automáticamente una referencia a una página diferente en el Frontend.Utilizo dos idiomas en la interfaz, alemán e inglés.En la ventana emergente creo un menú desplegable para seleccionar las páginas

public function getCMSFields_forPopup()
{
    return new FieldSet(
        new TextField('Titel'),
        new TextField('URL', 'Externer Link'),
        new SimpleTreeDropdownField('PageLinkID', 'Interner Link', 'SiteTree')
    );
}

Pero solo obtengo las páginas en alemán en el menú desplegable.Intenté cambiar el idioma de administración a inglés, pero no hubo cambios.La base de datos parece devolver solo las páginas alemanas ...

¿Alguna pista?

¿Fue útil?

Solución

Editar: Investigué un poco más y descubrí cómo hacer esto.Debe llamar a "disable_locale_filter" antes de obtener sus objetos SiteTree:

Translatable::disable_locale_filter();

Luego, llame a "enable_locale_filter" una vez que los haya recuperado:

Translatable::enable_locale_filter();

Estos son otros enfoques que dejaré aquí porque creo que aún son útiles ...

Creo que es posible que tengas que hacer esto usando Translatable :: get_by_locale (). Supongo que solo quieres que las personas puedan seleccionar una página para enlazar dentro de su idioma.

¿Quizás algo como esto?

public function getCMSFields_forPopup()
{
    $member = Member::currentUser();
    if($member && $member->Locale) {

        $pagesByLocale = Translatable::get_by_locale('SiteTree', $member->Locale);
        $pagesByLocale = $pagesByLocale->map('ID', 'Title', '(Select one)', true);

        return new FieldSet(
            new TextField('Title'),
            new TextField('URL', 'Externer Link'),
            new DropdownField('PageLinkID', 'Interner Link', $pagesByLocale);
        );

    } else {

        // Handle non-member

    }

}

Editar: vea los comentarios a continuación, pero otra opción es usar la función Translatable :: get_current_locale () para encontrar todas las páginas en el árbol del sitio para esa configuración regional ... si el usuario está viendo una página en inglés, entonces la configuración regional debe establecerseal inglés, etc.

public function getCMSFields_forPopup()
{
    $pagesByLocale = Translatable::get_by_locale('SiteTree', Translatable::get_current_locale());
    $pagesByLocale = $pagesByLocale->map('ID', 'Title', '(Select one)', true);

    return new FieldSet(
        new TextField('Title'),
        new TextField('URL', 'Externer Link'),
        new DropdownField('PageLinkID', 'Interner Link', $pagesByLocale);
    );

}

También puede obtener la configuración regional de la página actual, p. ej.

$this->Locale; // From within the model
$this->dataRecord->Locale; // from within the controller
Director::get_current_page()->Locale; // If you're outside the context of the page altogether i.e. code inside your DataObject.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top