2016-02-17 8 views
6

Ich benutze SuiteCRM 7.4.3 und muss zwei Dateien (eine PHP-Datei und eine JS-Datei) in die gesamte Projekt-Instanz enthalten. Was sind die besten Praktiken in dieser Situation? Wo sollte ich die Quelldateien kopieren und wo schließe ich sie ein?Include PHP und JS Dateien in SuiteCRM

+0

Was das Hinzufügen dieser Dateien der Grund wäre? Erweitern Sie die Funktionalität, d. H. Fügen Sie logic_hooks hinzu oder binden Sie einfach die JS in die gesamte SuiteCRM-Instanz ein? – MissAran

+0

@MissAran Ich möchte diese [JalaliDate] (https://github.com/sallar/jDateTime) für persische Sprache verwenden. –

+0

Verwenden Sie Composer für PHP und Bower/Npm für JS-Bibliothek. – k0pernikus

Antwort

3

SuiteCRM verwendet eine eigene TimeDate-Klasse, deren Aussehen Sie erweitern müssen, um Ihr eigenes (dieses JalaliDate) zu erstellen. Ehrlich gesagt, weiß ich nicht, wie Sie das implementieren könnten, ohne das Core SuiteCRM massiv zu beeinflussen.

Die Dateien, die Sie betrachten müssen, sind jedoch/TimeDate.php (das ist die Klasse, die die Suite für all ihre Zeitformatierung verwendet). Wir empfehlen immer, dass Sie versuchen, alles sicher zu machen, d. H. Alles befindet sich in einem benutzerdefinierten Ordner - aus dem Blickwinkel wird dies jedoch nicht sein.

Aber was ich normalerweise mache, wenn ich SDK anderer Anwendungen einschließe, lege ich es in custom/include/und dann, wann immer ich es brauche, verbinde ich es von dort.

+0

Vielen Dank. Ich werde versuchen, in dem benutzerdefinierten Ordner zu arbeiten und Ihnen das Ergebnis mitzuteilen. –

0

Wenn Sie eine Javascript-Datei SuiteCRM verwenden müssen, können Sie eine benutzerdefinierte Ansicht erstellen, die die "Skript-Tags" ausspuckt.

class CustomModuleViewSomething extends ViewEdit 
{ 
    function display(){ 
     $this->ev->process(); 
     $scripts = array(); 
     $scripts[] = '<script src="javascript1.js"></script>'; 
     $scripts[] = '<script src="javascript2.js"></script>'; 
     $scripts[] = '<script src="javascript3.js"></script>'; 
     echo $this->ev->display($this->showTitle) . implode($scripts); 
    } 
} 

Ich habe einen Kern, der auf moment.js um hängt Daten in JS zu verarbeiten. Dies ist nützlich, wenn Sie Prozessdaten auf den clientseitigen Daten benötigen.

/** 
* returns js Date() from a date that is in the users format 
* @depends momentjs library 
* @param datestr 
* @returns {*|Date} 
*/ 
function toDate(datestr) { 
    var $format = "", $splitformat = ["","",""], $dbformat = ["","",""]; 
    // Get user preferences date format 
    $format = cal_date_format 
    $format = $format.toUpperCase(); 
    $format = $format.replace('%D', 'DD') 
    $format = $format.replace('%M', 'MM') 
    $format = $format.replace('%Y', 'YYYY') 

    // return js date 
    return moment(datestr, $format).toDate() 
} 

Der bessere Weg Daten zu handhaben ist eine Aktion in einem customController zu erstellen:

class CustomModuleController extends SugarController { 
    function action_save() { 
     global $timedate; 
     $field = "date_entered"; 
     $timedate->fromString($this->bean->$field); 
     $this->bean->save(!empty($this->bean->notify_on_save)); 
    } 
}