Da nun Ilch den Release geschafft hat ^^ und ich meinen Discord Usern ein neues Feature zur Verfügung stellen will, habe ich einen Discordbot geschrieben der beim erstellen eines Forumposts automatisch benachrichtigt wird und URL und Bla bla bla in Discord postet. Funzt auch soweit.
Da ich aber kein Egoist bin, dachte ich mir ich versuchs mal massentauglich zu machen. Ich bin schwer auf Kriegsfuß mit diesem Model-View krams ^^. Ich blick zwar so einigermaßen durch, aber an einigen Ecken klemmts gewaltig. Es soll hierbei nur eine Administrationsmöglichkeit für 2 Textfelder entstehen.
An sich ist es nix großartiges. (Denke ich )
Puhh wo fang ich an.
Ich habe schon:
discordnotifier/config/config.php (ModulInstallation OK, Initialer-DB-Eintrag OK, ModulLöschen OK)
|------------/controllers/admin/index.php (Er überprüft zumindest die Textfelder schonmal xD)
|------------/mappers/Discordnotifier.php (Ist mir nen Rätsel. Wichtig für DB und einlesen der Vars?)
|------------/models/Discordnotifier.php (Naja is ja wie bei Java, getter und setter kennt man ja, funzt))
|------------/views/admin/index/index.php (Nich grade Designpreis wert aber es erscheint was ^^)
So. Ich habe als Vorlage vorhandene Datein genutzt und angepasst um überhaupt erstmal klarzukommen.
Es sieht nach blanken Chaos aus denke ich ^^.
Wenn ihr Zeit und lust habt einmal drüber zu schauen wäre ich euch echt dankbar.
<?php /** * @copyright Ilch 2.0 * @package ilch */ namespace Modules\Discordnotifier\Config; class Config extends \Ilch\Config\Install { public $config = [ 'key' => 'discordnotifier', 'version' => '1.0', 'icon_small' => 'fa-paper-plane', 'author' => 'Raptusguru', 'link' => 'http://www.underground-community.com', 'languages' => [ 'de_DE' => [ 'name' => 'Discordnotifier', 'description' => 'Der Discordnotifier postet neue Forenbeiträge, neue Forenthemen und neue Artikel in einen von euch angegebenen Discordchannel auf eurem Discord. Hierzu muss mein Bot User auf eurem Discord eingerichtet werden und eine JavaAnwendung auf einem Rechner laufen (am besten mit fester IP).', ], 'en_EN' => [ 'name' => 'Discordnotifier', 'description' => 'Discordnotifier.', ], ], 'ilchCore' => '2.0.2', 'phpVersion' => '5.6' ]; public function install() { $this->db()->queryMulti($this->getInstallSql()); } public function uninstall() { $this->db()->queryMulti('DROP TABLE `[prefix]_discordnotifier`'); } public function getInstallSql() { return 'CREATE TABLE IF NOT EXISTS `[prefix]_discordnotifier` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `destinationAdress` VARCHAR(255) NOT NULL, `urlToPage` VARCHAR(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1; INSERT INTO `[prefix]_discordnotifier` (`id`, `destinationAdress`, `urlToPage`) VALUES (1, "**IP zum System wo Discordnotifier läuft**", "**Die URL von deiner Seite hier**");'; } public function getUpdate($installedVersion) { } }
<?php /** * @copyright Ilch 2.0 * @package ilch */ namespace Modules\Discordnotifier\Controllers\Admin; use Ilch\Validation; class Index extends \Ilch\Controller\Admin { public function init() { $items = [ [ 'name' => 'manage', 'active' => true, 'icon' => 'fa fa-th-list', 'url' => $this->getLayout()->getUrl(['controller' => 'index', 'action' => 'index']) ] ]; $this->getLayout()->addMenu ( 'menuDiscordnotifier', $items ); } public function indexAction() { if ($this->getRequest()->isPost()) { $validation = Validation::create($this->getRequest()->getPost(), [ 'destinationURL' => 'required', 'ownURL' => 'required' ]); if ($validation->isValid()) { $this->getConfig()->set('destinationAdress', $this->getRequest()->getPost('destinationURL')); $this->getConfig()->set('urlToPage', $this->getRequest()->getPost('ownURL')); $this->redirect() ->withMessage('saveSuccess') ->to(['action' => 'index']); } else { $this->addMessage($validation->getErrorBag()->getErrorMessages(), 'danger', true); $this->redirect() ->withErrors($validation->getErrorBag()) ->to(['action' => 'index']); } } $this->getView()->set('destinationURL', $this->getConfig()->get('destinationAdress')); $this->getView()->set('ownURL', $this->getConfig()->get('urlToPage')); } }
Hier hab ich als vorlage den Imprintmapper. Sah am brauchbarsten aus
<?php /** * @copyright Ilch 2.0 * @package ilch */ namespace Modules\Discordnotifier\Mappers; use Modules\Discordnotifier\Models\Discordnotifier as DiscordnotifierModel; class Discordnotifier extends \Ilch\Mapper { /** * Gets the Discordnotifier. * * @param array $where * @return DiscordnotifierModel[]|array */ public function getImprint($where = []) { $entryArray = $this->db()->select('*') ->from('imprint') ->where($where) ->order(['id' => 'DESC']) ->execute() ->fetchRows(); if (empty($entryArray)) { return []; } $imprint = []; foreach ($entryArray as $entries) { $entryModel = new ImprintModel(); $entryModel->setId($entries['id']); $entryModel->setParagraph($entries['paragraph']); $entryModel->setCompany($entries['company']); $entryModel->setName($entries['name']); $entryModel->setAddress($entries['address']); $entryModel->setAddressAdd($entries['addressadd']); $entryModel->setCity($entries['city']); $entryModel->setPhone($entries['phone']); $entryModel->setFax($entries['fax']); $entryModel->setEmail($entries['email']); $entryModel->setRegistration($entries['registration']); $entryModel->setCommercialRegister($entries['commercialregister']); $entryModel->setVatId($entries['vatid']); $entryModel->setOther($entries['other']); $entryModel->setDisclaimer($entries['disclaimer']); $imprint[] = $entryModel; } return $imprint; } /** * Gets imprint. * * @param integer $id * @return ImprintModel|null */ public function getImprintById($id) { $imprint = $this->getImprint(['id' => $id]); return reset($imprint); } /** * Updates imprint model. * * @param ImprintModel $imprint */ public function save(ImprintModel $imprint) { $this->db()->update('imprint') ->values ( [ 'paragraph' => $imprint->getParagraph(), 'company' => $imprint->getCompany(), 'name' => $imprint->getName(), 'address' => $imprint->getAddress(), 'addressadd' => $imprint->getAddressAdd(), 'city' => $imprint->getCity(), 'phone' => $imprint->getPhone(), 'fax' => $imprint->getFax(), 'email' => $imprint->getEmail(), 'registration' => $imprint->getRegistration(), 'commercialregister' => $imprint->getCommercialRegister(), 'vatid' => $imprint->getVatId(), 'other' => $imprint->getOther(), 'disclaimer' => $imprint->getDisclaimer() ] ) ->where(['id' => $imprint->getId()]) ->execute(); } /** * Sets the config for given key/vale. * * @param string $key * @param string|integer $value * @param integer $autoload */ public function set($key, $value, $id) { $this->db()->update('imprint') ->values ( [ $key => $value, ] ) ->where(['id' => $id]) ->execute(); } }
Denke das Model passt so.
<?php /** * @copyright Ilch 2.0 * @package ilch */ namespace Modules\Discordnotifier\Models; class Discordnotifier extends \Ilch\Model { /** * The destinationURL of Discordnotifier. * * @var string */ protected $destinationURL; /** * The ownURL of Discordnotifier. * * @var string */ protected $ownURL; /** * Gets the destinationURL of Discordnotifier. * * @return string */ public function getDestinationURL() { return $this->destinationURL; } /** * Sets the destinationURL of Discordnotifier. * * @param string $destinationURL * @return this */ public function setDestinationURL($destinationURL) { $this->destinationURL = (string)$destinationURL; return $this; } /** * Gets the ownURL of Discordnotifier. * * @return string */ public function getOwnURL() { return $this->ownURL; } /** * Sets the ownURL of Discordnotifier. * * @param string $ownURL * @return this */ public function setOwnURL($ownURL) { $this->ownURL = (string)$ownURL; return $this; } }
Sag ja wird kein Designpreis gewinnen ^^.
<h1><?=$this->getTrans('manage') ?></h1> <form class="form-horizontal" method="POST" action=""> <?=$this->getTokenField() ?> <div class="form-group <?=$this->validation()->hasError('siteDiscordnotifier') ? 'has-error' : '' ?>"> <div class="col-lg-2 control-label"> <?=$this->getTrans('siteDiscordnotifier') ?>: </div> <div class="col-lg-4"> <div class="form-group"> <label for="destinationURL" class="col-lg-3 control-label"> Ziel Adresse des System worauf Discord Notifier läuft </label> <div class="col-lg-6"> <input type="text" class="form-control" id="destinationURL" name="destinationURL" /> </div> </div> <div class="form-group"> <label for="ownURL" class="col-lg-3 control-label"> Die eigene Homepage URL </label> <div class="col-lg-6"> <input type="text" class="form-control" id="ownURL" name="ownURL" /> </div> </div> </div> </div> <?=$this->getSaveBar() ?> </form>
Abschließend nochmal:
Modulinstallation/Deinstallation funzt. Modul wird unter Module dann angezeigt, Seite lässt sich aufrufen.
Textfelder sollten gefüllt sein mit InitialWerten der Installation, das ist aber nicht der fall. Ich kann etwas eintragen und auf Speichern drücken, bekomme auch Erfolgreich angezeigt, aber es hat sich nichts geändert in der Datenbank. Das ist die momentane Situation ^^.
Danke für eure Hilfe
MFG Raptus
verwendete ilch Version: 2.x