Da findest du laaaaaaaaaang niemand xD
so far
Yannici
Da findest du laaaaaaaaaang niemand xD
so far
Yannici
Kleines Beispiel.
Ob man auf einer Autobahn 3 oder 4 Fahrbahnen hat ist bei normalen Verkehr irrelevant.
Beispiels weiße beim Feierabendverkehr bringt die zusätzliche Fahrbahn immense Entlastung.
Dein Beispiel ist gerade deshalb nicht gut, da es einfach viel zu übertrieben ist das mit einer
Autobahn zu vergleichen! Eine 4-spurige Autobahn hat im Vergleich MILLIONENFACH mehr Entlastung als
die winzige Zeit von 0.0001sec. Außerdem: Die Entlastung einer 4-spurigen Autobahn ist spürbar. 0.0001sec in einem Skript nicht.
so far
Yannici
Zur Ãœbung ganz schön
so far
Yannici
Transparenz??
4/10
Zudem beinhalten deine Codes Fehler xD
Und es heißt "Semikolon" nicht "Simmikolon" ;D
so far
Yannici
Kann JNike nur zustimmen.
Dieses Tutorial dient vielleicht nur bei Projekten, bei dem wirklich Millionen von Daten (vergleichbar nur in einer Firma / Betrieb) geholt bzw. geschrieben werden müssen.
Es bringt hier im Retro Geschehen rein gar nichts die Daten nicht mit SELECT * zu holen, denn man merkt es nicht
Also klar, es ist schöner und besser programmiert, aber hier bringt das nicht viel.
so far
Yannici
Fotzen das ist mein Script
Ich hatte das nie veröffentlicht und jetzt haben es alle
so far
Yannici
Okay
Das schon, aber das ist einer von vielen Kommentaren
Die anderen Kommentare mache ich auch nur in Klassen
In anderem Programmcode habe ich auch nur einzeilige Kommentare
Naja, jetzt mal genug diskutiert
so far
Yannici
Ich bin kein Webdesigner
Bei der Arbeit sind wir in einem Entwicklerteam, ja.
Wir haben sogar Coderichtlinien, die alle einhalten müssen - also sieht jeder Code
gleich aus. Mein Chef kann also nie etwas gegen meinen Codestil sagen
Ja, die Zeilenumbrüchen dienen zur Ãœbersichtlichkeit.
Und ja, wir werden auf kein Ergebnis kommen
Werde meinen Stil wegen einer Person auch nicht ändern
so far
Yannici
Alter xD
Du verstehst wohl den Sinn der Kommentare nicht.
Die stören keinesfalls und beinhalten Informationen, die für weitere Entwickler
dann sehr einfach zu lesen sind.
Ihr Anwender könnt damit nichts anfangen, aber ist letztendlich wirklich gut
Also wenn du doch so der Pro bist, dann würde mich dein Code interessieren
Ich finde meinen Code gut und übersichtlich
Letztendlich ist der Codestil nicht wichtig - die Funktionaliät und Performance ist wichtig. Und
das trifft größtenfalls auf meinen zu
Und warum ich das schreibe?
Rein informativ
so far
Yannici
Nach dem du jetzt viele positiven Zusagen erhalten hast,
fängst du nun an es umzusetzen?
Joa, bin sogar schon dabei
Jetzt braucht ihr nur Geduld
so far
Yannici
Du widersprichst dich teilwiese selbst ?!
Mein Schreibstil ist fatal - du findest unordentlichen Code allgemein schlecht - wobei mein Code eigentlich sehr ordebtlich ist?!
Jedenfalls wüsste ich nicht warum meine Kommentare fatal sein sollten.
Nachteile haben sie keine - nur Vorteile.
Klar sollte man in OOP bzw. Klassen schreiben Du hast es ja selbst gesagt, also warum frägst du noch?
Außer die Frage war rein rhetorisch
Naja, letztendlich ist es doch ansichtssache und ihr sieht den Code nicht
Ich mag dich auch
so far
Yannici
Steff:
Naja, das ist dann noch Anischtssache Finde ein Rückgabewert bei Funktionen nicht wirklicch notwendig.
@TheChamp
ähm.. ja danke
Wer auch immer du bist.
so far
Yannici
Gruppen,Homes sind kein muss für ein Retro CMS.
Und warum Spaghetti Codes, alles OOP.
Aber wenn man ein CMS schreibt hat man doch die Absicht was zu erreichen?
Ein CMS mit den Basic Seiten wie News und Me - das geht auf jeden Fall in 11 Stunden
Ich meine aber eine CMS, mit der man auch was erreichen könnte
Spoiler anzeigen
PHP Alles anzeigen<?php /** * * * Ich werde hier jetzt ein Code machen * Ich starte gleich... * * Warte kurz... * * GLEICH KOMMTS! ;D * * So gleich gleich ist es so weit! :D * * DER CODE IST: * */ require_once "/require_shiit.php"; /** * * * Ich werde hier jetzt ein Code machen * Ich starte gleich... * * Warte kurz... * * GLEICH KOMMTS! ;D * * So gleich gleich ist es so weit! :D * * DER CODE IST: * */ public function mein_code { $using->mein_code; mein::code(true); } ?>
Hör' auf mit der Spamerei.
Die Kommentare haben eine Funktion und beinhalten wichtige Informationen für Mitentwickler.
Sorry, aber sowas ist einfach albern / kindisch, sich über einen gut-dokumentierten Code lustig zu machen.
Warum habe ich mich auch in so einer Szene mit soo vielen Noobs abgelassen
Ah und rückgabewert darf nicht fehlen xd
Doch der darf fehlen
Wenn die Funktion was ausführt, muss es nicht unbedingt was zurückgeben.
so far
Yannici
Glaub mir, dann hast du aber einen Spaghetti Code bis ins Unendliche
Und nein, das schafft man nicht. Nicht mit jeder Funktion (Gruppen, Homes, Community-Pages etc.)
so far
Yannici
Das RetroTools CMS v2 wird sie so Aussehen wie die Version 1 ?
Ja, aber der Wechsel zu anderen Templates ist mit Smarty relativ einfach.
(Mit Habbo Style)
Dauert das coden ohne Unterbrechung ca. 8 Stunden (Eine einzige Person)
Ich glaube nicht dass das zu viel Arbeit ist, wenn du jeden Tag 2 Stunden arbeitest.Vollständig (Staff, News) ungefähr 9-10..
Aber zu viel finde ich das nicht xD
Sag mal - wenn ich ein komplettes neues CMS schreiben würde, dann würde das weitaus länger dauern.
Mit CMS meine ich auch das Housekeeping-Tool Also wer keine Ahnung hat, einfach mal ... chillen.
Naja, wer sowas hasst, der hat noch nie in einem Team entwickelt
Solche Kommentare sind wichtig! Es stehen sämtliche Informationen über die folgenden Funktionen (Parameter und deren Typen ...) oder Member drin.
Wenn weitere Entwickler hinzukommen, ist es sehr einfach in den Code einzufinden.
Außerdem hat man einen gut dokumentierten Code damit
so far
Yannici
In einem Spoiler mal die Vorschau meines Codes bzw. Code-Stiles.
Die User-Klasse.
Wahrscheinlich noch lange nicht final Aber eine vorerste Version.
so far
Yannici
Beschreibung
Ich weiß gar nicht wo bzw. wie ich anfangen soll. Habe heute die Idee gehabt, warum nicht RetroTools v2?
RetroTools war 2010 relativ beliebt und eine gute Downloadbase. Manche werden es noch kennen, andere wiederrum
nicht. Der Vorteil an dieser Downloadbase ist, dass die User auch etwas zu tun haben. Mit einem User-Panel in dem
es möglich ist Nachrichten zu verschicken, Punkte durch Up- und Downloads zu bekommen und in einer Shoutbox zu
"chatten". Jedenfalls war der Code sehr schlecht und auch die Lücken waren zahlreich. Dadurch, dass ich wirklich
überrascht war, wie beliebt meine CMS doch war, ist es mir nun gelungen an den Gedanken anzuknüpfen die CMS
komplett neu zu scripten.
Neue Ideen? Was soll besonders werden?
Ich glaube es brauch nicht einmal so große neue Ideen oder Besonderheiten. Es gibt nicht viele Downloadbase CMS' und
deshalb wird auch dieses erfolgreich. Durch meine größeren PHP Kenntnisse (u.a. Smarty, OOP & MySQLi) ist es möglich
eine wirklich gute CMS aufzubauen. Eine vollstände Retro CMS spukte auch schon in meinem Kopf, aber das wäre zu viel
Arbeit für eine einzige Person.
Needings
Was ich brauche?
Eventuell einen weiteren Entwickler und vielleicht eine Person für die Instandhaltung der Seite.
In was wird geschrieben?
Habe in den letzten Jahren meine Sprachen schon wirklich aufgefrischt. Also wird geschrieben in folgenden Sprachen:
- PHP => OOP + Smarty
- CSS / HTML (das Design wird durch Smarty relativ dynamisch, sodass ihr die Templates ganz einfach selbst schreiben könnt)
- MySQLi (Nachfolger von MySQL)
- jQuery (bzw. JavaScript. Die Effekte haben mich fasziniert und deshalb habe ich jQuery schon großteils gelernt)
- Ajax (Vor allem für Dynamischen Aufruf von PHP-Scripts)
Und was soll der Thread?
Mit diesem Thread will ich vorerst ein Feedback, ob ihr begeistert seid oder ob ihr, ganz im Gegenteil, völlig
gegen ein solches Projekt seid.
Also durch die Umfrage frage ich euch: Soll ich es angehen oder eher nicht?
Wie gesagt: Viele werden mich oder die RetroTools CMS kennen und vor allem von denen erwarte ich ein Feedback
und hoffentlich ein positives. Eins kann ich euch versprechen: Der Code wird besser
Wen es interessiert, hier schoneinmal die User-Klasse. Nur um meinen Code-Stil etc. vorzustellen:
<?php
/**
*
* @author Yannici
* @copyright Yannici
*
* @since 10.05.2012
*/
/**
* User-Klasse
*/
class User {
/**
*
* @var integer
*/
private $id;
/**
* Username
*
* @var string
*/
private $username;
/**
* Passwort [MD5]
*
* @var string ENCRYPTED
*/
private $password;
/**
* E-Mail
*
* @var string
*/
private $email;
/**
* Punkte
*
* @var integer
*/
private $points;
/**
* Uploads
*
* @var integer
*/
private $uploads;
/**
* Rang
*
* @var enum
*/
private $rang;
/**
* Ränge
*
* @consts integer
*
* @const ADMINISTRATOR
* @const MODERATOR
* @const USER
*/
const USER = 0;
const MODERATOR = 1;
const ADMIN = 2;
/**
* Lädt einen User in das Objekt
*
* @param param integer
*
* @return loaded boolean
*/
public function getUser($param) {
global $cDB;
if(is_int($param) {
$query = "SELECT * FROM `users` WHERE `id` = '" . $param . "'";
} elseif(is_string($param)) {
$query = "SELECT * FROM `users` WHERE `id` = '" . $param . "'";
}
$num = $cDB->num($query);
if($num > 0) {
$data = $cDB->fetch($query);
$this->id = $data['id'];
$this->username = $data['username'];
$this->password = $data['password'];
$this->email = $data['email'];
$this->points = $data['points'];
$this->uploads = $data['uploads'];
$this->rang = $data['rang'];
return true
}
return false;
}
/**
* Gibt die ID zurück
*
* @return id integer
*/
public function getID() {
return $this->id;
}
/**
* Gibt den Usernamen zurück
*
* @return username string
*/
public function getUsername() {
return $this->username;
}
/**
* Setzt den Usernamen
*
*/
public function setUsername($value) {
if(!is_string($value)) {
$msg = "Der Username muss eine korrekte Zeichenkette sein!";
return $msg;
}
if(empty($value)) {
$msg = "Der Username darf nicht leer sein!";
return $msg;
}
if(strlen($value) < 4) {
$msg = "Der Username muss länger als 3 Zeichen sein!";
return $msg;
}
$this->username = $value;
return true
}
/**
* Gibt das Passwort im MD5-Format zurück
*
* @return password string
*/
public function getPassword() {
return $this->password;
}
/**
* Gibt die E-Mail des Users zurück
*
* @return email string
*/
public function getMail() {
return $this->email;
}
/**
* Setzt die E-Mail Adresse
*
*/
public function setMail($value) {
if(empty($value)) {
$msg = "Die Mail darf nicht leer sein!";
return $msg;
}
if(!is_string($value)) {
$msg = "Die Mail muss eine korrekte Zeichenkette sein!";
return $msg;
}
if(self::checkMail($value)) {
$msg = "Gebe eine korrekte Mail-Adresse an!";
return $msg;
}
$this->email = $value;
return true;
}
/**
* Prüft, ob die Mail korrekt ist
*
* @param mail string
*
* @return check boolean
*/
public static function checkMail($email) {
return preg_match("/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-.]+\.([a-zA-Z]{2,4})$/", $email);
}
/**
* Gibt die Punkte des Users zurück
*
* @return points integer
*/
public function getPoints() {
return $this->getPoints;
}
/**
* Gibt die Anzahl der Uploads zurück
*
* @return uploads integer
*/
public function getUploads() {
return $this->uploads;
}
/**
* Gibt den Rang des Users zurück
*
* @return rang enum
*/
public function getRang() {
return $this->rang;
}
/**
* Setzt die E-Mail Adresse
*
*/
public function setRang($value) {
if(empty($value)) {
$msg = "Der Rang darf nicht leer sein!";
return $msg;
}
if(!is_int($value)) {
$msg = "Der Rang muss eine Zahl sein! Oder der Enum der Konstanten in der User-Klasse.";
return $msg;
}
if($value != self::ADMIN AND $value != self::MODERATOR AND $value != self::USER) {
$msg = "Diese Rang gibt es nicht!";
return $msg;
}
$this->rang = $value;
return true;
}
/**
* Prüft, ob der User Administrator ist
*
* @return isAdmin boolean
*/
public function isAdmin() {
$this->rang == self::ADMIN ? return true : return false;
}
/**
* Prüft, ob ein angegebener User ein Administrator ist
*
* @param id userid
*
* @return isAdmin boolean
*/
public static function userIsAdmin($id) {
global $cDB;
$user = $cDB->fetch("SELECT `rang` FROM `users` WHERE `id` = '" . $id . "'");
$user['rang'] == self::ADMIN ? return true : return false;
}
/**
* Prüft, ob der User Moderator ist
*
* @return isMod boolean
*/
public function isMod() {
$this->rang == self::MODERATOR ? return true : return false;
}
/**
* Prüft, ob ein angegebener User ein Moderator ist
*
* @param id userid
*
* @return isMod boolean
*/
public static function sUserIsMod($id) {
global $cDB;
$user = $cDB->fetch("SELECT `rang` FROM `users` WHERE `id` = '" . $id . "'");
$user['rang'] == self::MODERATOR ? return true : return false;
}
/**
* Userdaten eines Users bekommen, zum direkten Weiterleiten ans Template
*
* @param id integer
*
* @return data array
*/
public static function sGetUserDataForTemplate($id) {
global $cDB;
$data = array();
$query = $cDB->query("SELECT * FROM `users` WHERE `id` = '" . $id . "'");
while($row = $cDB->fetch($query)) {
$data[] = $row;
}
return $data;
}
/**
* Userdaten eines Users bekommen
*
* @param id integer
*
* @return data array
*/
public static function sGetUserData($id) {
global $cDB;
$data = $cDB->fetch("SELECT * FROM `users` WHERE `id` = '" . $id . "'");
return $data;
}
/**
* Gibt den Usernamen anhand einer ID zurück
*
* @param id integer
*
* @return user string
*/
public static function sGetUsernameById($id) {
global $cDB;
$user = $cDB->fetch("SELECT `username` FROM `users` WHERE `id` = '" . $id . "'");
return $user['username'];
}
/**
* Speichert den User und deren Daten
*
* @return done boolean
*/
public function save() {
global $cDB;
$prepare = $cDB->mysqli->prepare("UPDATE `users` SET `email` = ?, `username` = ?, `password` = ?, `points` = ?, `uploads` = ?, `rang` = ? WHERE `id` = ?");
$prepare->bind_param('sssiiii', $this->email, $this->username, $this->password, $this->points, $this->uploads, $this->rang, $this->id);
$prepare->execute();
$affected = $prepare->affected_rows;
$prepare->close();
$affected > 0 ? return true : return false;
}
}
?>
Alles anzeigen
####################################################################################
HIER SIND DIE ERSTEN SCREENSHOTS!
STARTSEITE /HOME:
Klick!
ADMIN-PANEL NEWS ÜBERSICHT:
Klick!
ADMIN-PANEL NEWS SCHREIBEN:
Klick!
so far
Yannici
Drohung gab es in einer Gehörlosenschule bei uns in der Nähe auch schon.
Ein Junge war damals mit der Waffe von zu Hause gegangen. Die Mutter hat sofort die Polizei gerufen, die dann die Schule umstellte und auf den Jungen wartete.
Der Junge kam aber nie bei der Schule an. Kam am Abend ganz normal wieder nach Hause.
so far
Yannici
Ich hatte es schonmal geschafft eine erfolgreiche Downloadbase aufzubauen. ==> RetroTools
Up-to-Date zu bleiben ist natürlich unmöglich. Es kann immer sein, dass ein Link down geht oder eine neue Version
rauskommt, was man nicht gleich merkt.
Wenn man irgendwann bis zu 1000 Tools in der Downloadbase hat, dann brauch man mindestens 10 - 20 Mitarbeiter um diese Up-to-Date zu halten
Tipp also: Lass die User mitarbeiten, wo es nur geht. Das ist die beste Möglichkeit es 1. up-to-date zu halten und 2. die User haben was zu tun und deine Seite bleibt lebendig.
Vielleicht kannst dich mit meiner RetroTools CMS etwas inspirieren
Naja, aber wünsche dir schonmal viel Glück & Erfolg
so far
Yannici