it-swarm-eu.dev

Načíst vlastní šablonu z MENU_CALLBACK

Tady je moje současná situace: Mám externí ověřovací platformu, která se načte do Drupal přes iframe. Když je uživatel ověřen, externí aplikace přesměruje uživatele na koncový bod Drupal, který jsem nastavil pomocí:

function mymodule_menu() {

    $items['mymodule/oauth'] = array(
        'title' => 'My Module Receiver',
        'page callback' => 'mymodule_oauth',
        'access callback' => TRUE,
        'type' => MENU_CALLBACK,
        'file' => 'mymodule.pages.inc'
    );

    return $items;
}

A pak moje zpětné volání:

function myapp_oauth() {

    // Does some stuff, authenticates the user, etc

    echo '
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
<p>Please wait...</p>
<script type="text/javascript">
  // Check if we are in an iframe or not
  if (window.location.href != window.parent.location.href) {
    // Reload the parent page
    window.parent.location.reload();
  } else {
    // Not in an iframe, so go to the home page
    window.location.href = "' . base_path() . '";
  }
</script>
</body>
</html>
';
    exit;

}

Vypadá to jako neuvěřitelně nedbalý způsob, jak to zvládnout, raději bych nemusel ukončit aplikaci a v ideálním případě bych chtěl jednoduše definovat soubor šablony tpl, který se má načíst namísto tematických souborů pro tuto stránku. Může někdo doporučit lepší způsob, jak to zvládnout?

3
bhamrick

Můžete definovat funkci motivu, která používá soubor šablony, a poté použít funkci motivu pro výstup zpětného volání nabídky.
Následuje příklad kódu pro Drupal 7; podobný kód lze použít pro Drupal 6).

function mymodule_theme() {
  return array(
    'mymodule_oath' => array(
      'variables' => array('id' => NULL), // This is the list of the variables that will be passed to the template file. 
      'template' => 'mymodule_oath', // Change this to the template file name.
    ),
  );
}

function mymodule_oath() {
  // Does some stuff, authenticates the user, etc.

  print theme('mymodule_oath', array('id' => 10));
  return NULL;
}
3
kiamlaluno

Pokud vrátíte false z obsluhy nabídky, Drupal nevolá page.tpl.php).

Tak:

function myapp_oath() {
    // Echo your page here
    return false;
}

Jak definovat šablonu, trochu záleží na verzi Drupal, kterou používáte), ale podívejte se na hook_theme() a theme() jako výchozí bod.

1
Matthew Scharley