Entwicklung des Kerns

Baumstruktur

Der Code ist auf verschiedene Verzeichnisse im Stammverzeichnis von Jeedom verteilt (/var/www/html Standard):

Frontend

Die Benutzeroberfläche von Jeedom funktioniert wie eine Website und basiert auf PHP in Verbindung mit SQL sowie JavaScript und CSS.

Zunächst lädt der Browser die Datei /index.php :

Desktop

Die Benutzeroberfläche von Jeedom basiert auf dem One-Page-Prinzip. Nach dem Laden werden die verschiedenen Seiten durch Ändern des Inhalts eines Containers angezeigt.

Die Hauptdatei auf dem Desktop ist /desktop/php/index.php.

Jede Seite enthält mindestens zwei Parameter in der URL. Beispiel:

https://my.dns1.jeedom.com/index.php?v=d&p=dashboard :

In diesem Fall die Datei /desktop/php/index.php Die Datei wird geladen /desktop/php/dashboard.php in der div div_pageContainer. Dieser lädt außerdem die Datei /desktop/js/dashboard.js einschließlich der JavaScript-Funktionen, die für die Anzeige dieser Seite (hier: das Dashboard) erforderlich sind.

Die Datei /desktop/php/index.php kümmert sich außerdem um:

Die Datei desktop/common/js/utils.js ist also immer vorhanden und wird einmal geladen. Es ermöglicht:

So stellen die Dateien „index.php“ und „utils.js“ die Struktur und die Grundfunktionen der Benutzeroberfläche bereit. Anschließend wird der Inhalt der aufgerufenen Seite aus den Dateien „desktop/php/page.php“ und „desktop/js/page.js“ geladen. Diese rein auf die Benutzeroberfläche ausgerichteten Inhaltsdateien können auf die Funktionen des Core zugreifen (die Klassen /core/class) direkt in PHP oder in JavaScript mithilfe von JavaScript-Klassen (/core/js) über AJAX-Aufrufe (/core/ajax).

Die internen Funktionen des Core sind somit für den internen Betrieb (Backend) klar voneinander getrennt, sind aber über die Benutzeroberfläche zugänglich. Ebenso verfügt jede Seite über ihren eigenen PHP- und JS-Code. Dies ermöglicht eine bessere Weiterentwicklung und Wartung des Codes sowie eine Leistungsoptimierung, da nur die erforderlichen Klassen und Funktionen geladen werden.

Core v4.2

Seit Core v4.2 werden alle JavaScript-Funktionen aus der Datei desktop/common/js/utils.js sind in einem Namespace isoliert jeedomUtils{}. Beispielsweise die zuvor im Root-Fenster angezeigte Funktion loadPage() wird jeedomUtils.loadPage().

Aus Gründen der Abwärtskompatibilität für Plugins werden die alten Funktionen weiterhin deklariert und werden in einer späteren Version als veraltet markiert. Liste hier anzeigen.

Core v4.3

In Anlehnung an Version 4.2 wurden die Frontend-Seiten für den Desktop isoliert, um zu vermeiden, dass Variablen und Funktionen im Root-Fenster referenziert werden. Dies schützt vor möglichen Deklarationskonflikten und erleichtert das Lesen und Verstehen des Codes sowie dessen Debugging.

Die Datei core/js/jeedom.class.jsdefiniert zwei neue Namespaces:

jeeFrontEnd

Einige globale Variablen befinden sich nun in diesem Namespace:

jeeFrontEnd = {
  __description: 'Global object where each Core page register its own functions and variable in its sub-object name.',
  jeedom_firstUse: '',
  language: '',
  userProfils: {},
  planEditOption: {state: false, snap: false, grid: false, gridSize: false, highlight: true},
  //loadPage history:
  PREVIOUS_PAGE: null,
  PREVIOUS_LOCATION: null,
  NO_POPSTAT: false,
  modifyWithoutSave: false,
  //@index.php
  serverDatetime: null,
  clientServerDiffDatetime: null,
  serverDatetime: null,
  serverTZoffsetMin: null,
}

Typisches Beispiel für desktop/js/corepage.js :

"use strict"

if (!jeeFrontEnd.corepage) {
	jeeFrontEnd.corepage = {
		myVar: 'oneVar',
		init: function() {
			window.jeeP = this //root shortcut
		},
		postInit: function() {
			//Do stuff once page loaded
		},
		myFunction: function(_var) {
			var myFuncContextVar = this.myVar + ' -> ' + _var
			console.log(myFuncContextVar)
		}
	}
}

jeeFrontEnd.corepage.init()

$(function() {
  jeeFrontEnd.corepage.postInit()
})

$('#myButton').on('click', function() {
	jeeP.myFunction('test')
})

Der Namespace der Seite wird daher beim erneuten Aufrufen derselben Seite nicht neu erstellt. Außerdem wird die Variable jeeP ermöglicht die Nutzung jeeFrontEnd.corepage mit einer kurzen Syntax, sie entspricht einem self spezifisch für diese Seite.

jeephp2js

Wird verwendet, um Variablen von einem PHP-Skript an das JavaScript-Frontend zu übergeben. Beispiel:

sendVarToJS([
  'jeephp2js.myjsvar1' => init('type', ''),
  'jeephp2js.myjsvar2' => config::byKey('enableCustomCss')
]);

Dann

$(function() {
  if (jeephp2js.myjsvar1 == '1') { ... }
})

Der Namespace jeephp2js{} wird beim Seitenwechsel geleert, um unerwartete Restvariablen zu vermeiden.

Mobil

Die Desktop-Oberfläche ist responsiv und passt sich der Größe des Browsers an. Allerdings wären bestimmte Vorgänge, wie beispielsweise das Bearbeiten eines Szenarios, auf einem kleinen Bildschirm schwierig. Außerdem ist es wichtig, die Ladegeschwindigkeit zu optimieren, wenn man unterwegs mit einem Smartphone über 3G oder sogar 4G surft. Aus diesem Grund verfügt Jeedom über eine mobile Oberfläche, die schlanker und für kleine Bildschirme optimiert ist.

Die Referenzseite lautet /mobile/html/index.html, das folgende Aufgaben übernimmt:

Die Datei mobile/js/application.js enthält die Funktionen, die auf allen Seiten gemeinsam sind.

Wie bei der Desktop-Oberfläche besteht die aufgerufene Seite aus zwei Dateien:

Ein wesentlicher Unterschied bei der mobilen Version ist das Fehlen von PHP-Seiten. Die Codegenerierung basiert daher auf JavaScript-Klassen, die weiterhin über AJAX-Aufrufe Funktionen des Core aufrufen können.

CSS-Dateien

Die CSS-Dateien des Core basieren hauptsächlich auf diesen Dateien:

Die Themes enthalten themenspezifische CSS-Dateien, insbesondere die „colors.css“-Datei.

Reihenfolge beim Laden der CSS-Dateien auf dem Desktop:

Backend

in Arbeit

Die Benutzeroberfläche ist eine Sache, aber natürlich ist Ihr Jeedom weiterhin aktiv, um Szenarien, Cron-Jobs, Protokolle, Verlaufsdaten usw. auszuführen.

Das Backend basiert auf denselben PHP-Klassen wie das Frontend, die sich in /core/class/. Jeder Teil von Jeedom verfügt über eine eigene PHP-Klasse, darunter insbesondere:

usw.

Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site web. Si vous continuez à utiliser ce site, nous supposerons que vous en êtes satisfait.