[DEV] SyncCMS

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [DEV] SyncCMS

    Guten Tag,

    Ich starte mit einem neuem Projekt namens SyncCMS. Es basiert auf das Design vom Apollo Projekt. (da es nie fertiggestellt wurde)

    Features
    Spoiler anzeigen

    • MVC
    • Auto Updater
    • Plugin System
    • Language System
    • Cross Browser Support
    • Flat / Material Design


    Plugins
    Spoiler anzeigen

    • Preload
    • Adblock Detection
    • Snowstorm


    TODO
    Spoiler anzeigen



    Screens


    Snippets
    Spoiler anzeigen

    PHP-Quellcode

    1. <?php
    2. class Route
    3. {
    4. private $url;
    5. private $view;
    6. private $model;
    7. private $config;
    8. private $connection;
    9. public function __construct($config, $connection)
    10. {
    11. $this->config = $config;
    12. $this->connection = $connection;
    13. if(isset($_GET['url'])) {
    14. $this->url = explode('/', filter_var(rtrim($_GET['url'], '/'), FILTER_SANITIZE_URL));
    15. } else {
    16. $this->url = null;
    17. }
    18. if(!is_null($this->url[0])) {
    19. if(isset($this->url[0])) {
    20. if(file_exists('App/Views/' . $this->url[0] . '.php')) {
    21. $this->view = $this->url[0];
    22. $this->model = $this->url[0];
    23. } else {
    24. $this->view = 'Error';
    25. $this->model = 'Error';
    26. }
    27. }
    28. if(isset($this->url[1])) {
    29. if(file_exists('App/Views/' . $this->url[0] . '_' . $this->url[1] . '.php')) {
    30. $this->view = $this->url[0] . '_' . ucfirst($this->url[1]);
    31. $this->model = $this->url[0];
    32. } elseif(file_exists('App/Views/' . $this->url[1] . '.php')) {
    33. $this->view = $this->url[1];
    34. $this->model = $this->url[1];
    35. } else {
    36. $this->view = 'Error';
    37. $this->model = 'Error';
    38. }
    39. }
    40. } else {
    41. $this->view = 'Index';
    42. $this->model = 'Index';
    43. }
    44. new Page($config, $connection, ucfirst($this->view), ucfirst($this->model), $this->url);
    45. }
    46. public function __destruct()
    47. {
    48. $this->url = null;
    49. $this->view = null;
    50. $this->model = null;
    51. $this->config = null;
    52. $this->connection = null;
    53. }
    54. }
    55. ?>
    Alles anzeigen


    PHP-Quellcode

    1. <?php
    2. $config = [
    3. 'database' => [
    4. 'host' => '127.0.0.1',
    5. 'user' => 'root',
    6. 'pass' => '',
    7. 'name' => 'hobbu'
    8. ],
    9. 'website' => [
    10. 'url' => 'http://127.0.0.1',
    11. 'name' => 'Hobbu',
    12. 'language' => 'de',
    13. 'timezone' => 'Europe/Berlin',
    14. 'maintenance' => false
    15. ],
    16. 'register' => [
    17. 'credits' => 25000,
    18. 'duckets' => 3000,
    19. 'diamonds' => 150,
    20. 'loyalty' => 50,
    21. 'rank' => 1,
    22. 'motto' => 'Willkommen im Hotel!',
    23. 'vip' => true,
    24. 'vip_points' => 50,
    25. 'startroom' => false
    26. ],
    27. 'client' => [
    28. 'host' => '127.0.0.1',
    29. 'port' => 30000
    30. ],
    31. 'game' => [
    32. 'external_vars' => 'http://127.0.0.1/resources/game/gamedata/external_variables.txt',
    33. 'external_texts' => 'http://127.0.0.1/resources/game/gamedata/external_flash_texts.txt',
    34. 'external_override_vars' => 'http://127.0.0.1/resources/game/gamedata/external_override_variables.txt',
    35. 'external_override_texts' => 'http://127.0.0.1/resources/game/gamedata/external_flash_override_texts.txt',
    36. 'figuredata' => 'http://127.0.0.1/resources/game/gamedata/figuredata.xml',
    37. 'productdata' => 'http://127.0.0.1/resources/game/gamedata/productdata.xml',
    38. 'furnidata' => 'http://127.0.0.1/resources/game/gamedata/furnidata.xml',
    39. 'base' => 'http://127.0.0.1/resources/game/',
    40. 'habbo' => 'http://127.0.0.1/resources/game/habbo.swf'
    41. ],
    42. 'plugins' => [
    43. 'smooth' => true,
    44. 'adblock' => true,
    45. 'preload' => true,
    46. 'snowstorm' => false
    47. ],
    48. 'logs' => [
    49. 'clear' => true,
    50. 'active' => [
    51. 'sync' => true,
    52. 'error' => true
    53. ]
    54. ],
    55. 'verification' => [
    56. 'hash' => 'HASH',
    57. 'active' => true
    58. ],
    59. 'app' => [
    60. 'root' => str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']),
    61. 'build' => '1000',
    62. 'version' => 'RTM',
    63. 'release' => '22.07.2015 11:04',
    64. 'developer' => true
    65. ]
    66. ];
    67. ?>
    Alles anzeigen



    Farbcodes
    Spoiler anzeigen

    • Danger -> Rot
    • Default -> Blau
    • Primary -> Grün
    • Warning -> Orange
    • Akzent -> Pink


    Livedemo: www.hobbu.org

    FORTSCHITT
    60%


    Freundliche Grüsse,
    Synergy
    "Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."

    - Linus Torvalds

    Dieser Beitrag wurde bereits 43 mal editiert, zuletzt von Synergy ()

  • Die Einblicke bis jetzt gefallen mir, mach nicht wie alle anderen den Fehler und gib nicht auf, mach es zuende.

    Ich würde im Header, die online Anzeige in einer Blase wie im rCMS setzten (Geschmackssache), und das Logo und die Anzeige etwas größer machen.

    Mit freundlichen Grüßen

    Agency
    Ich komm' mit großem Herz, dickem Kopf und kleinem Bauch
    Wortgewalttätig, aber masterpiece-ig drauf
  • Bisher gefällt mir alles sehr gut. Beim Header würde ich dort wo die blaue Farbe ist evtl. noch zusätzlich Wolken als Hintergrund hinzufügen, da der Header sonst etwas leer aussieht. Man könnte auch eventuell noch den Kopf des Users in der Navigations-"Spalte" machen, wenn du verstehst was ich meine. Würde dann denke ich noch etwas besser aussehen. Ansonsten ist bisher alles top.
  • Danke für die Vorschläge, hier sind noch ein Paar Snippets:

    Route:

    PHP-Quellcode

    1. <?php
    2. class Route
    3. {
    4. private $url;
    5. private $view;
    6. private $model;
    7. private $config;
    8. private $connection;
    9. public function __construct($config, $connection)
    10. {
    11. $this->config = $config;
    12. $this->connection = $connection;
    13. if(isset($_GET['url'])) {
    14. $this->url = explode('/', filter_var(rtrim($_GET['url'], '/'), FILTER_SANITIZE_URL));
    15. } else {
    16. $this->url = null;
    17. }
    18. if(!is_null($this->url[0])) {
    19. if(isset($this->url[0])) {
    20. if(file_exists('App/Views/' . $this->url[0] . '.php')) {
    21. $this->view = $this->url[0];
    22. $this->model = $this->url[0];
    23. } else {
    24. $this->view = 'Error';
    25. $this->model = 'Error';
    26. }
    27. }
    28. if(isset($this->url[1])) {
    29. if(file_exists('App/Views/' . $this->url[1] . '.php')) {
    30. $this->view = $this->url[1];
    31. $this->model = $this->url[0];
    32. } else {
    33. $this->view = 'Error';
    34. $this->model = 'Error';
    35. }
    36. }
    37. } else {
    38. $this->view = 'Index';
    39. $this->model = 'Index';
    40. }
    41. new Page($config, $connection, ucfirst($this->view), ucfirst($this->model));
    42. }
    43. public function __destruct()
    44. {
    45. $this->url = null;
    46. $this->view = null;
    47. $this->model = null;
    48. $this->config = null;
    49. $this->connection = null;
    50. }
    51. }
    52. ?>
    Alles anzeigen


    Database:

    PHP-Quellcode

    1. <?php
    2. class Database
    3. {
    4. private $db;
    5. private $config;
    6. public function __construct($config)
    7. {
    8. $this->config = $config;
    9. }
    10. public function Connect()
    11. {
    12. try {
    13. $this->db = new PDO('mysql:host=' . $this->config['database']['host'] . ';dbname=' . $this->config['database']['name'] . ';charset=utf8', $this->config['database']['user'], $this->config['database']['pass']);
    14. $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    15. return $this->db;
    16. } catch (PDOException $e) {
    17. die($e->getMessage());
    18. }
    19. }
    20. public function __destruct()
    21. {
    22. $this->db = null;
    23. $this->config = null;
    24. }
    25. }
    26. ?>
    Alles anzeigen

    Config:

    PHP-Quellcode

    1. <?php
    2. $config = [
    3. 'database' => [
    4. 'host' => '127.0.0.1',
    5. 'user' => 'root',
    6. 'pass' => '',
    7. 'name' => 'hobbu'
    8. ],
    9. 'website' => [
    10. 'url' => 'http://127.0.0.1',
    11. 'name' => 'Hobbu',
    12. 'language' => 'de',
    13. 'timezone' => 'Europe/Berlin',
    14. 'maintenance' => false
    15. ],
    16. 'plugins' => [
    17. 'smooth' => true,
    18. 'adblock' => true,
    19. 'preload' => true,
    20. 'snowstorm' => false
    21. ],
    22. 'verification' => [
    23. 'hash' => 'HASH',
    24. 'active' => true
    25. ],
    26. 'app' => [
    27. 'build' => '1000',
    28. 'version' => 'RTM',
    29. 'release' => '22.07.2015 11:04',
    30. 'developer' => true
    31. ]
    32. ];
    33. ?>
    Alles anzeigen
    "Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."

    - Linus Torvalds
  • Die Einblicke sind schon mal nicht schlecht und ich freue mich natürlich auf weitere.
    Dir kann ich auch nur nachlegen, dass du dieses Projekt durchziehst, denn die meisten
    Projekte scheitern am Durchhaltevermögen. Ich freue mich definitiv schon auf das
    Endergebnis und werde diesen Thread weiter verfolgen. Viel Erfolg wünsche ich dir.

    Mit freundlichen Grüßen

    Decision



  • Er hatte ja das Design Released. Dann hab ich es bisschen verändert. Aber ich bin offen für Design Vorschläge. Wie ich erwähnt habe ich mich noch nicht ganz für ein Design entschieden.
    "Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."

    - Linus Torvalds
  • Ich habe mich schon informiert über namespaces. Vielleicht werde ich dies noch einfügen. Aber mal eine ganz andere Frage. Ihr kennt sich das Projekt Apollo von Johnix. Dies wurde ja nie fertig und was haltet ihr davon wenn ich das "recode"? Oder sollte ich was anderes machen?
    "Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."

    - Linus Torvalds
  • Synergy schrieb:

    Ich habe ich schon informiert mit namespaces. Vielleicht werde ich dies noch einfügen. Aber mal eine ganz andere Frage. Ihr kennt sich das Projekt Apollo von Johnix. Dies wurde ja nie fertig und was haltet ihr davon wenn ich das "recode"? Oder sollte ich was anderes machen?
    Beende erstmal das, was du begonnen hast (SyncCMS).
    Falls du sowas vor hast, würde ich dir NodeJS empfehlen..

    cya ya

    Sashiri bester junge
  • Ok, habt ihr noch Design oder Features Vorschäge? Werde morgen mit dem Index und Register beginnen.
    "Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."

    - Linus Torvalds

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Synergy ()

  • UPDATE
    • Developer Mode hinzugefügt
    • Web-Log hinzugefügt
    • Inputs hinzugefügt


    Der Web-Log ist einfach eine Datei, die aufzeichnet was von welcher IP aufgerufen wurde. Durch die Funktion error_log() wird in eine Datei ein Log eingetragen und somit wird es wenig performance nutzen, anstatt fopen() oder file_put_contents(). Dazu werden die Logs alle 24h geleert, damit es nicht all zu grosse Datein gibt, aber man kann wie gewöhnlich den Log ein und ausschalten. Ein Log würde etwa so aussehen:

    Quellcode

    1. [24/07/2015 - 08:55:22] 127.0.0.1 [**] Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36 [**] GET app/views/home.php [**] 127.0.0.1:80 -> 127.0.0.1:80
    Web-Log Erkärung:
    [DATUM] [USERIP] [BROWSER] [FILE]

    Der Developer Mode macht nichts anderes als die Errors die auftreten einblendet, also error_reporting(). Wenn er ausgeschaltet ist, werden die Errors ausgeblendet.

    Screens:

    [spoiler][url='https://picr.ws/image/a9H'][img='https://retrotown.ws/index.php/ImageProxy/?image=2142cf9454fad65d7728e8131bebc9330aec7b9d-aHR0cHM6Ly9waWNyLndzL2ltYWdlcy81ZGI3NWQ5MTA2MTJiYzRhZjMzNWM5NjA3OTVlYTE5MC5wbmc%3D&s=f00c0e949b654806345d96fae1dc851377a78845'][/img][/url]
    [url=https://picr.ws/image/a9l][img='https://retrotown.ws/index.php/ImageProxy/?image=fd2a8ac55049b8f52f15dad8963a1133fccb5259-aHR0cHM6Ly9waWNyLndzL2ltYWdlcy9mMzFiNzEwMWFmNzUwOTI2Y2QzMzZiZDA4YzRmZDNkZC5wbmc%3D&s=f00c0e949b654806345d96fae1dc851377a78845'][/img][/url]
    [/spoiler]


    Weitere Updates werden folgen.[/file]
    "Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."

    - Linus Torvalds

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Synergy ()

  • UPDATE
    • Index hinzugefügt
    • Eigener Avatarimager
    • Codes wurden verbessert


    Mit dem neuem Avatarimager kann man ganz leicht Avatars erstellen, das geht so:

    PHP-Quellcode

    1. <?php $this->imager->Generate('size=l/action=wav/user=Synergy'); ?>

    Das würde dann sowas ausgeben:


    Die verschiedenen Parameter werden duch ein / getrennt. Man kann auch nur den Kopf ausgeben wenn man es so macht:

    PHP-Quellcode

    1. <?php $this->imager->Generate('size=l/action=wav/user=Synergy/headonly=1'); ?>
    Ausgabe:



    Er besitzt natürlich auch ein Cache System.
    Snippet:

    PHP-Quellcode

    1. <?php
    2. class Imager
    3. {
    4. private $data;
    5. private $base;
    6. private $size;
    7. private $user;
    8. private $params;
    9. private $figure;
    10. private $action;
    11. private $config;
    12. private $result;
    13. private $gesture;
    14. private $headonly;
    15. private $direction;
    16. private $connection;
    17. private $head_direction;
    18. public function __construct($config, $connection)
    19. {
    20. $this->config = $config;
    21. $this->connection = $connection;
    22. }
    23. public function Generate($params)
    24. {
    25. $this->params = explode('/', $params);
    26. foreach($this->params as $key => $value) {
    27. $pos = strpos($this->params[$key], '=');
    28. $getKey = substr($this->params[$key], 0, $pos);
    29. $getValue = substr($this->params[$key], $pos + 1);
    30. $this->data[$getKey] = $getValue;
    31. }
    32. $this->figure = (isset($this->data['figure'])) ? $this->figure = 'figure=' . $this->data['figure'] : 'figure=';
    33. $this->action = (isset($this->data['action'])) ? $this->action = '&action=' . $this->data['action'] : '';
    34. $this->size = (isset($this->data['size'])) ? $this->size = '&size=' . $this->data['size'] : '';
    35. $this->gesture = (isset($this->data['gesture'])) ? $this->gesture = '&gesture=' . $this->data['gesture'] : '';
    36. $this->direction = (isset($this->data['direction'])) ? $this->direction = '&direction=' . $this->data['direction'] : '';
    37. $this->head_direction = (isset($this->data['head_direction'])) ? $this->head_direction = '&head_direction=' . $this->data['head_direction'] : '';
    38. $this->user = (isset($this->data['user'])) ? $this->user = $this->data['user'] : '';
    39. $this->headonly = (isset($this->data['headonly'])) ? $this->headonly = '&headonly=' . $this->data['headonly'] : '';
    40. if(!empty($this->user)) {
    41. $query = $this->connection->prepare('SELECT look FROM users WHERE username = :username LIMIT 1');
    42. $query->execute([':username' => $this->user]);
    43. if($query->rowCount()) {
    44. $r = $query->fetchObject();
    45. $this->figure = 'figure=' . $r->look;
    46. }
    47. }
    48. $this->result = $this->figure . $this->action . $this->size . $this->gesture . $this->direction . $this->head_direction . $this->headonly;
    49. if(file_exists('Resources/Data/Users/Avatars/' . $this->result . '.png')) {
    50. echo '<img src="data:image/png;base64,' . base64_encode(file_get_contents('Resources/Data/Users/Avatars/' . $this->result . '.png')) . '">';
    51. } else {
    52. $this->base = 'http://www.habbo.de/habbo-imaging/avatarimage?' . $this->result;
    53. file_put_contents('Resources/Data/Users/Avatars/' . $this->result . '.png', file_get_contents($this->base));
    54. echo '<img src="data:image/png;base64,' . base64_encode(file_get_contents($this->base)) . '">';
    55. }
    56. }
    57. public function __destruct()
    58. {
    59. $this->data = null;
    60. $this->base = null;
    61. $this->size = null;
    62. $this->user = null;
    63. $this->params = null;
    64. $this->figure = null;
    65. $this->action = null;
    66. $this->config = null;
    67. $this->result = null;
    68. $this->gesture = null;
    69. $this->headonly = null;
    70. $this->direction = null;
    71. $this->connection = null;
    72. $this->head_direction = null;
    73. }
    74. }
    75. ?>
    Alles anzeigen

    Screens:
    "Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."

    - Linus Torvalds

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Synergy ()