# Un exemple de mise en place
Ce chapitre décrit la construction de la page de login standard
# Ajout de la libraire
Afin d'instancier les composants graphiques d'Anakeen Platform, il vous faut ajouter la librairie
@anakeen/user-interfaces
à votre projet avec npm. Soit :
npm install @anakeen/user-interfaces
WARNING
Le dépôt @anakeen
est privé et doit être instancié au niveau de npm
# Mise en place du code
Dès lors, vous pouvez importer votre composant de la manière suivante:
import myComponent from "@anakeen/user-interfaces/components/lib/myComponent";
Soit dans un fichier ".vue" :
<template>
<myComponent ref="myComponent" :parameter1="value" ...></myComponent>
</template>
Vous aurez accès aux différentes méthodes du composant en utilisant sa référence :
public myFunction() {
this.$refs.myComponent.myComponentMethod(...args);
}
# Exemple: Page de login
# LoginPage.vue
Le fichier vue utilisé est le suivant :
<template>
<div class="login-parent">
<div class="login-banner">
<img class="imgbanner" src="/CORE/Images/anakeen-logo.svg" alt="Anakeen logo" />
</div>
<div class="login-form">
<ank-authent ref="authent" default-language="auto" authent-languages="fr_FR, en_US"></ank-authent>
</div>
</div>
</template>
<script>
import AnkAuthent from "@anakeen/user-interfaces/components/lib/AnkAuthent";
export default{
components: {
"ank-authent": AnkAuthent
}
mounted() {
console.log(this.$refs.authent.availableLanguage());
}
}
</script>
<style lang="scss">
.login-parent {
height: 100%;
}
.login-page {
width: 100%;
height: 100vh;
display: flex;
align-items: center;
flex-direction: column;
background-color: #f5f5f5;
.login-banner {
border-radius: 5px;
}
.imgbanner {
height: 8rem;
}
.login-form {
min-width: 30rem;
}
</style>
# LoginPage.xml
Le fichier XML de configuration de route est le suivant :
<?xml version="1.0"?>
<sde:config xmlns:sde="https://platform.anakeen.com/4/schemas/sde/1.0">
<sde:routes namespace="Ui:Component:Authent">
<sde:route name="Login">
<sde:priority>1</sde:priority>
<sde:callable>Anakeen\Components\Authent\Routes\LoginPage</sde:callable>
<sde:method>GET</sde:method>
<sde:pattern>/login/</sde:pattern>
<sde:description>Login page</sde:description>
<sde:requiredAccess/>
<sde:authenticated>false</sde:authenticated>
</sde:route>
</sde:routes>
</sde:config>
# LoginPage.php
La classe PHP de route :
<?php
namespace Anakeen\Components\Authent\Routes;
use Anakeen\Core\ContextManager;
use Anakeen\Core\Utils\Gettext;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
class LoginPage
{
public function __invoke(Request $request, Response $response, $args)
{
$page = __DIR__ . "/LoginPage.html.mustache";
$template = file_get_contents($page);
$data = [
"title" => sprintf(
Gettext::___("Connexion to %s", "login"),
ContextManager::getParameterValue(\Anakeen\Core\Settings::NsSde, "CORE_CLIENT")
),
"JS_DEPS" => [
[
"key" => "polyfill",
"path" => \Anakeen\Ui\UIGetAssetPath::getJsPolyfill(),
"noModule" => true
],
[
"key" => "kendo",
"path" => \Anakeen\Ui\UIGetAssetPath::getJSKendoPath()
],
[
"key" => "kendoDLL",
"path" => \Anakeen\Ui\UIGetAssetPath::getJSKendoComponentPath()
],
[
"key" => "vueDll",
"path" => \Anakeen\Ui\UIGetAssetPath::getJSVueComponentPath()
]
],
"JS" => [
[
"key" => "login",
"path" => \Anakeen\Ui\UIGetAssetPath::getElementAssets(
"ank-components",
\Anakeen\Ui\UIGetAssetPath::isInDebug() ? "dev" : "prod"
)["login"]["js"]
]
],
"JS_LEGACY" => [
[
"key" => "login",
"path" => \Anakeen\Ui\UIGetAssetPath::getElementAssets(
"ank-components",
\Anakeen\Ui\UIGetAssetPath::isInDebug() ? "dev" : "legacy"
)["login"]["js"]
]
],
"CSS" => [
[
"key" => "bootstrap",
"path" => \Anakeen\Ui\UIGetAssetPath::getCssBootstrap()
],
[
"key" => "kendo",
"path" => \Anakeen\Ui\UIGetAssetPath::getCssKendo()
],
[
"key" => "components",
"path" => \Anakeen\Ui\UIGetAssetPath::getCssSmartWebComponents()
]
]
];
$mustache = new \Mustache_Engine();
return $response->write($mustache->render($template, $data));
}
}
# LoginPage.html.mustache
<!doctype html>
<html lang="en">
<head>
<title>{{title}}</title>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
{{#CSS}}
<link rel="stylesheet" type="text/css" data-id="{{key}}" href="{{path}}"/>
{{/CSS}}
{{#JS_DEPS}}
<script type="text/javascript" {{#noModule}}nomodule{{/noModule}} data-id="{{key}}" src="{{path}}"></script>
{{/JS_DEPS}}
{{#JS}}
<script type="module" data-id="{{key}}" src="{{path}}"></script>
{{/JS}}
</head>
<body class="login-page">
<div id="login"></div>
{{#JS_LEGACY}} <script nomodule data-id="{{key}}" src="{{path}}"></script> {{/JS_LEGACY}}
</body>
</html>
# LoginPage.js
Ce fichier doit être compilé avec un packager (voir la documentation de vueJS).
import Vue from "vue";
import Login from "./LoginPage.vue";
Vue.use(LoadScript);
new Vue({
el: "#login",
components: {
Login
},
template: "<login></login>"
});