Termine in Kalender einfügen
BlaiiND98
- php
Ich möchte gerne einen eigenen Kalender im Google Kalender Style bauen. Das Kalenderblatt und das styling habe ich bereits umgesetz. Dieses könnt ihr hier sehen.
//Timezone!!
date_default_timezone_set('Europe/Berlin');
// Vor und Zurück
if (isset($_GET['ym'])) {
$ym = $_GET['ym'];
} else {
// Aktueller Monat
$ym = date('Y-m');
}
$timestamp = strtotime($ym."-01");
if ($timestamp === false) {
$timestamp = time();
}
// Heute ermitteln
$today = date('Y-m-j', time());
// H3 Title
$html_title = date('Y / m', $timestamp);
// Prev & Next / Monat Link
$prev = date('Y-m', mktime(0, 0, 0, date('m', $timestamp)-1, 1, date('Y', $timestamp)));
$next = date('Y-m', mktime(0, 0, 0, date('m', $timestamp)+1, 1, date('Y', $timestamp)));
// Anzahl der Tage ermitteln
$day_count = date('t', $timestamp);
// 0:So 1:Mo 2:Di usw...
$str = date('w', mktime(0, 0, 0, date('m', $timestamp), 0, date('Y', $timestamp)));
// Kalender zusammenbauen!!
$weeks = array();
$week = '';
// Leer Zeilen hinzufügen
$week .= str_repeat('<td></td>', $str);
for ( $day = 1; $day <= $day_count; $day++, $str++) {
$date = $ym.'-'.$day;
if ($today == $date) {
$week .= '<td class="today">'.$day;
} else {
$week .= '<td>'.$day;
}
$week .= '</td>';
// Ende der Woche bzw. Ende des Monats
if ($str % 7 == 6 || $day == $day_count) {
if($day == $day_count) {
// Zelle hinzufügen
$week .= str_repeat('<td></td>', 6 - ($str % 7));
}
$weeks[] = '<tr>'.$week.'</tr>';
// Neue Woche
$week = '';
}
}
<table class="table table-bordered">
<tr>
<th>Mo</th>
<th>Di</th>
<th>Mi</th>
<th>Do</th>
<th>Fr</th>
<th>Sa</th>
<th>So</th>
</tr>
<?php
foreach ($weeks as $week) {
echo $week;
}
?>
</table>
Ergebnis aus dem oben ggezeigten Code
Vorlauge aus Google Kalender
Mein Ergebnis kommt doch sehr an den Google Kalender hin, oder? Jetzt kommt mein Problem :/ Wie bekomme ich Termin in den Kalender? Ich möchte Termine, die über mehrere Tage wie im Google Kalender über die ganze Zeit ziehen (Bezeichnung nur einmal).
Termin die nur ein Tag, oder ein paar Stunde sind, sollen als eine Zeile dargestellt werden.
Meine Tabelle
CREATE TABLE `kalender` (
`id` int(11) NOT NULL,
`code` varchar(200) NOT NULL,
`bezeichnung` varchar(200) NOT NULL,
`auto` varchar(200) NOT NULL,
`grund` text NOT NULL,
`datum` date NOT NULL,
`ganztags` varchar(50) NOT NULL,
`von` varchar(10) NOT NULL,
`bis` varchar(10) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Ich habe das Gefühl die muss optimiert werden? Wenn ein Termin über mehrere Tage geht, dann sollte vielleicht das datum in eine weitere Tabelle ausgelagert werden? In der erten Tabelle die Grunddaten wie Bezeichnung, die Uhrzeit und das Datum in eine extra Tabelle. Habe ich ein Termin, welcher über drei Tage geht, wird dieser in dier Datums-Tabelle dreimal eingetragen mit einer RefID zur den Grunddaten?
Nur es bleibht noch immer die Frage, wie bekomme ich die Termin in meinen Kalender?
Wenn ich folgendes ergänze
$week .= '<br><br>';
$week .= 'Ich bin ein Test';
$week .= '<br>';
$week .= 'Ich bin ein Test';
$week .= '</td>';
Werden die Einträge in alle Felder ergänz. Im gesamten sieht dieses dann so aus
for ( $day = 1; $day <= $day_count; $day++, $str++) {
$date = $ym.'-'.$day;
if ($today == $date) {
$week .= '<td class="today">'.$day;
} else {
$week .= '<td>'.$day;
}
$week .= '<br><br>';
$week .= 'Ich bin ein Test';
$week .= '<br>';
$week .= 'Ich bin ein Test';
$week .= '</td>';
// Ende der Woche bzw. Ende des Monats
if ($str % 7 == 6 || $day == $day_count) {
if($day == $day_count) {
// Zelle hinzufügen
$week .= str_repeat('<td></td>', 6 - ($str % 7));
}
$weeks[] = '<tr>'.$week.'</tr>';
// Neue Woche
$week = '';
}
}
Jetzt stellt sich mir nur noch die Frage, wie kann ich sagen, zeig mir nur etwas bei einem bestimmten Datum an. Das Datum wird in der Tabelle in folgenden Form gespeichert 2017-08-09
Ok, ich denke ich habe es hinbekommen.
$datumTermine = array("2017-08-17", "2017-08-18", "2017-08-20", "2017-08-25");
for ( $day = 1; $day <= $day_count; $day++, $str++) {
$date = $ym.'-'.$day;
if ($today == $date) {
$week .= '<td class="today">'.$day;
} else {
$week .= '<td>'.$day;
}
if (in_array($date, $datumTermine)) {
$week .= '<br><br>';
$week .= 'Ich bin ein Test';
}
$week .= '</td>';
// Ende der Woche bzw. Ende des Monats
if ($str % 7 == 6 || $day == $day_count) {
if($day == $day_count) {
// Zelle hinzufügen
$week .= str_repeat('<td></td>', 6 - ($str % 7));
}
$weeks[] = '<tr>'.$week.'</tr>';
// Neue Woche
$week = '';
}
}
Jetzt bleibt noch die Frage wie ich es umsetzte wenn die Termine aus der Tabelle kommen und es an einem Tag auch mal mehrere sein könnten.
Nächste Version
//Timezone!!
date_default_timezone_set('Europe/Berlin');
function Kalender_Termine($mysqli, $datum) {
$stmt = $mysqli->prepare("SELECT id, kalenderID, datum
FROM kalender_termine WHERE datum=?");
$stmt->bind_param("s", $datum);
$stmt->execute();
$stmt->bind_result($id, $kalenderID, $datum);
$stmt->store_result();
if($stmt->num_rows() > 0) {
while ($stmt->fetch()){
$Kalender_Termine[] = array(
'id' => $id,
'kalenderID' => $kalenderID,
'datum' => $datum
);
}
return $Kalender_Termine;
}
}
// Vor und Zurück
if (isset($_GET['ym'])) {
$ym = $_GET['ym'];
} else {
// Aktueller Monat
$ym = date('Y-m');
}
$timestamp = strtotime($ym."-01");
if ($timestamp === false) {
$timestamp = time();
}
// Heute ermitteln
$today = date('Y-m-j', time());
// H3 Title
$html_title = date('Y / m', $timestamp);
// Prev & Next / Monat Link
$prev = date('Y-m', mktime(0, 0, 0, date('m', $timestamp)-1, 1, date('Y', $timestamp)));
$next = date('Y-m', mktime(0, 0, 0, date('m', $timestamp)+1, 1, date('Y', $timestamp)));
// Anzahl der Tage ermitteln
$day_count = date('t', $timestamp);
// 0:So 1:Mo 2:Di usw...
$str = date('w', mktime(0, 0, 0, date('m', $timestamp), 0, date('Y', $timestamp)));
// Kalender zusammenbauen!!
$weeks = array();
$week = '';
// Leer Zeilen hinzufügen
$week .= str_repeat('<td></td>', $str);
for ( $day = 1; $day <= $day_count; $day++, $str++) {
$date = $ym.'-'.$day;
if ($today == $date) {
$week .= '<td class="today">'.$day;
} else {
$week .= '<td>'.$day;
}
$datumTermine = Kalender_Termine($mysqli, $date);
if($datumTermine > 0) {
foreach($datumTermine as $array){
$week .= '<br><br>';
$week .= $array['kalenderID'];
}
}
$week .= '</td>';
// Ende der Woche bzw. Ende des Monats
if ($str % 7 == 6 || $day == $day_count) {
if($day == $day_count) {
// Zelle hinzufügen
$week .= str_repeat('<td></td>', 6 - ($str % 7));
}
$weeks[] = '<tr>'.$week.'</tr>';
// Neue Woche
$week = '';
}
}
Was sagt ihr zu meinem Aufbau? Ich muss dazu sage es ist das erste mal, dass ich so etwas umsetze.
Eine letzte Frage, wenn ein Termin über mehrere Tage geht, wie schaffe ich es dann wie auf dem Google Kalender zu sehen durchgehend etwas zu markieren und nur auf dem erten Feld die Bezeichnung zu schreiben oder ist dieses vielleicht gar nicht so vorteilhaft?
Ich muss nochmals nachfragen. Habt ihr eine Idee wie ich es erreichen kann wenn ein Termin über mehere Tage geht, dass die Bezeichnung nur auf dem ersten Feld angezeigt wird?
Hallihallo!
Nur so als eventuelle Anregung, kann ich Dir erzählen, wie ich es in meinem Kalender mal gemacht habe, hier mal beispielhaft ausgehend von einer Monatsanzeige mit allen Terminen des Monats:
$tage = array();
for ($i=1; $i<=$anzahl_der_tage_im_monat; $i++) {
$tage[$i] = array();
}
Das ist ist erstmal die ganz grobe Struktur, in die hinterher die Termindaten reingeschaufelt werden. Ich fange übrigens mit Absicht mit dem Index 1 an, das macht es für mich etwas einfacher in der späteren Verwendung.
Lies alle Termine aus der Datenbank (oder woher auch immer, das kann z.B. auch eine iCal-Datei sein), die in den entsprechenden Monat fallen.
Iteriere per foreach durch alle gefundenen Termine und lege sie in dem Array von eben ab. Beim Ablegen in dem Array kann man Alles ablegen, was man möchte. Ist zwar vielleicht nicht die eleganteste Option, aber sie ist übersichtlich.
foreach ($gelesene_termine as $gt) {
// Lege Start und Ende des Termins fest.
// Das Folgende war bei meinem Kalender passend,
// weil ich Start und Ende als Timestamp
// in der Datenbank stehen hatte.
// Bei anderen Formaten müsste man das noch anpassen, etwa per strtotime()
$start = date("j",$gt['start']); // "j" = Tag des Monats, ohne führende 0
$end = date("j",$gt['ende']);
for($betroffener_tag = $start; $betroffener_tag <= $end; $betroffener_tag++) {
$tage[$betroffener_tag][] = array(
'id' => $gt['id'],
'titel' => $gt['titel'],
'ort' => $gt['ort'],
// ... alles, was man sonst noch so braucht,
// etwa in meinem Fall:
'onclick' => 'zeigetermin('.$gt['id'].')',
'label' => $gt['label']
);
}
}
An diesem Punkt könnte man schon, wenn man das möchte, dafür sorgen, dass nur am ersten Tag des Termins alle Infos dazu in das Array kommen. Das habe ich damals so gemacht. Heute würde ich aber eher in der Ausgabe des Arrays als HTML diese Sortierung vornehmen. Das macht das Ganze variabler und wiederverwendbarer.
$done = array();
Bei jedem Termin, der in das HTML eingesetzt werden soll, kann man nun überprüfen, ob $done[Termin_ID]
existiert und true
ist. Falls nicht, wurde der Termin offenbar noch nicht abgearbeitet, man bearbeitet also gerade seinen ersten Tag.
Also alle Details ins HTML schreiben, dann $done[Termin_ID] = true
setzen, und weiter.
Am nächsten Tag des Termins existiert dann $done[Termin_ID]
, und es ist true
. Also macht man z.B. nur eine farbliche Markierung und (z.B.) den onclick-handler (ich weiss, ekelhaft, aber man kann das ja auch über das Setzen einer Klasse im HTML regeln 😉 ).Wie gesagt, in einigen Details würde ich meinen Kalender nach heutigem Wissen anders programmieren, vor Allem würde ich die Dinge wie das Auslesen der Termine, das Aufbereiten der Datenstruktur für die Anzeige und die Anzeige selber voneinander in Funktionen voneinander kapseln.
Aber ich denke, der grobe Programmablauf wäre immer noch derselbe.
Vielleicht konnte ich Dir ja ein Wenig helfen :-)
Beste Grüsse, Tobias Hahner
Hallöchen,
Vielleicht konnte ich Dir ja ein Wenig helfen :-)
vielen Dank für deine sehr Ausführliche Antwort. Ehrlich gesagt habe ich das mit den Array() nict so ganz verstanden. Allerdings als ich das Start- und Enddatum gesehen habe bin ich auf eine Idee gekommen die geklappt hat.
$datumTermine = Kalender_Termine($mysqli, $date);
if($datumTermine > 0) {
//$week .= '<br><br>';
foreach($datumTermine as $array){
if ($array["datum"] == $array["datum_von"]) {
$week .= '<div style="background:'.$array["farbe"].';
margin-bottom:5px;
padding-left:8px;">
<a href="/kalender-datenblatt.php?code='.$array["id"].'"
target="_blank"
style="color:#ffffff">'.$array["bezeichnung"]. "</a>
<span style='color:#ffffff;
font-size:10px;
display: block;
padding-bottom: 2px;'>". $array["wer"]. '</span>
</div>';
} else {
$week .= '<div style="background:'.$array["k_farbe"].';
margin-bottom:5px;
padding-left:8px;
height: 36px;">
</div>';
}
}
Ich prüfe ob den Eintrag den ich aus der Tabelle Termine holfe gleich dem Startdatum ist. Wenn ja, zeig mir alle Infos an die ich benötige, wenn nicht lass alles leer und mach nur ein DIV mit der Hintergrundfarbe.
Hallihallo!
vielen Dank für deine sehr Ausführliche Antwort. Ehrlich gesagt habe ich das mit den Array() nict so ganz verstanden.
Welches Array meinst Du? Das Array $tage ist einfach nur ein Datencontainer, in dem ich alle Termine ablege. So kann man sich übersichtlicher durchhangeln.. Das Array $done ist nur eine kleine Hilfe. Die brauchst Du aber ja nicht, Deine Lösung ist genauso zielführend.
Allerdings als ich das Start- und Enddatum gesehen habe bin ich auf eine Idee gekommen die geklappt hat.
Sehr gut, mehr wollte ja Keiner 😉
Ich prüfe ob den Eintrag den ich aus der Tabelle Termine holfe gleich dem Startdatum ist. Wenn ja, zeig mir alle Infos an die ich benötige, wenn nicht lass alles leer und mach nur ein DIV mit der Hintergrundfarbe.
Im Prinzip also genau das Gleiche wie in meinem Vorschlag, nur viel direkter. Freut mich, wenn ich helfen konnte.
Beste Grüsse, Tobias Hahner
Hallöchen,
könntest du mir vielleicht noch ein Tipp geben nach was ich suchen muss um eine Funktion bereit zu stellen zu können dass ein User den Termin in seinen Outlook Kalender importieren kann?
Hallihallo!
könntest du mir vielleicht noch ein Tipp geben nach was ich suchen muss um eine Funktion bereit zu stellen zu können dass ein User den Termin in seinen Outlook Kalender importieren kann?
Es gibt da ein ganz klar definiertes Datei-Format namens ics. Das sind Dateien, in denen Termine zum Import in verschiedensten Kalenderprogrammen angeboten werden. Die Syntax dahinter ist relativ einfach, google einfach mal nach "ics Format". Parallel dazu gibt es auch noch das VCal- Format, das z.B. von Android- Kalendern bevorzugt wird.
Die beiden Formate sind sich im grossen und Ganzen sehr ähnlich. Solch eine Datei per PHP zusammenzubauen ist nicht schwerer als eine HTML-Ausgabe zu generieren. Kleiner Tipp nebenbei: mich hat es eine Menge Nerven gekostet, dass die Datei zwar korrekt war, aber vom Google-Kalender nicht importiert werden wollte. Achte auf den Content-Type- Header 😉
Welches der beiden Formate jetzt für Outlook besser geeignet ist, weiss ich jetzt nicht aus dem Kopf. Aber das Beste ist sowieso, einfach BEIDE Dateien anzubieten 😉
Beste Grüsse, Tobias Hahner
Es gibt da ein ganz klar definiertes Datei-Format namens ics. Das sind Dateien, in denen Termine zum Import in verschiedensten Kalenderprogrammen angeboten werden.
Das ist richtig,und die sollte man primär nutzen.
Allerdings können die (ics/ical) etwas (noch) nicht:
Feiertage und andere wichtige Termine (Fasching!) die
Moin,
gestatte mir ein paar Fragen und Anmerkungen:
$datumTermine = Kalender_Termine($mysqli, $date); if($datumTermine > 0) { foreach($datumTermine as $array){
Was gibt denn deine Funktion Kalender_Termine für einen Datentyp zurück? Ich sehe hier einmal einen numerischen Vergleich und dann eine Array-Iteration. Damit das wie gewünscht funktioniert, darf im Fall keiner Daten in $datumTermine
kein Array stehen, sondern z.B. NULL
, denn
$datumTermine = array();
$datumTermine > 0 == TRUE;
Das heißt du kannst explizit auf NULL
testen.
Im folgenden Code fallen verschiedene Dinge auf:
target=_blank
ist nicht die feine englische Art, denn der Nutzer möchte vielleicht gerne entscheiden, wie viele Browserfenster sich öffnen. Außerdem funktioniert in einem neuen Fenster das Zurück nicht mehr.$week .= '<div style="background:'.$array["farbe"].'; margin-bottom:5px; padding-left:8px;"> <a href="/kalender-datenblatt.php?code='.$array["id"].'" target="_blank" style="color:#ffffff">'.$array["bezeichnung"]. "</a> <span style='color:#ffffff; font-size:10px; display: block; padding-bottom: 2px;'>". $array["wer"]. '</span> </div>';
Viele Grüße
Robert
Hallo Robert B.,
Benutze besser CSS-Klassen.
Es gibt keine CSS-Klassen. 😝
Bis demnächst
Matthias
Moin,
Jetzt stellt sich mir nur noch die Frage, wie kann ich sagen, zeig mir nur etwas bei einem bestimmten Datum an. Das Datum wird in der Tabelle in folgenden Form gespeichert 2017-08-09
Wenn du wie vorgeschlagen datetime
-Felder nimmst, kannst du in SQL vergleichen:
select * from kalender where von <= $zeitpunkt and bis >= $zeitpunkt;
Viele Grüße
Robert
Hallo BlaiiND98,
Jetzt kommt mein Problem :/ Wie bekomme ich Termin in den Kalender?
Was heißt denn „in den Kalender bekommen“? Meinst du eine Eingabe per Web-Oberfläche oder auch so etwas wie einen iCal-Import?
Meine Tabelle
CREATE TABLE `kalender` ( `id` int(11) NOT NULL, `code` varchar(200) NOT NULL, `bezeichnung` varchar(200) NOT NULL, `auto` varchar(200) NOT NULL, `grund` text NOT NULL, `datum` date NOT NULL, `ganztags` varchar(50) NOT NULL, `von` varchar(10) NOT NULL, `bis` varchar(10) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Ich habe das Gefühl die muss optimiert werden?
Auf jeden Fall! Nimm erst einmal die richtigen Datentypen (und einen guten Zeichensatz):
CREATE TABLE `kalender` (
`id` bigint(20) unsigned NOT NULL auto_increment,
`code` varchar(200) NOT NULL,
`bezeichnung` varchar(200) NOT NULL,
`auto` varchar(200) NOT NULL,
`grund` text NOT NULL,
`datum` date NOT NULL,
`ganztags` varchar(50) NOT NULL,
`von` datetime NOT NULL,
`bis` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Die Bedeuting von datum
und ganztags
ist mir noch nicht klar.
Wenn ein Termin über mehrere Tage geht, dann sollte vielleicht das datum in eine weitere Tabelle ausgelagert werden?
Wieso, du hast doch von
und bis
− jetzt sogar als datetime
.
Nur es bleibht noch immer die Frage, wie bekomme ich die Termin in meinen Kalender?
Am ehesten wohl per HTML-Formular.
Viele Grüße
Robert
Hallo,
Was heißt denn „in den Kalender bekommen“? Meinst du eine Eingabe per Web-Oberfläche oder auch so etwas wie einen iCal-Import?
das hast du falsch verstanden ;) Ich meinte damit wie bekomme ich die Termin, die ich in der Datenbank habe, in den Kaleder. Hat jetzt geklappt:
https://forum.selfhtml.org/self/2017/aug/24/termine-in-kalender-einfuegen/1702313#m1702313
Die Bedeuting von
datum
undganztags
ist mir noch nicht klar.
Datum z.B. 2017-08-09 ganztags, dann wird der Termin über den ganzen Tag verteilt, wenn dieses nicht angeklickt wird, muss ein Zeitraum eingegeben werden, deshalb auch die Felder von - bis die dann nicht datetime sondern nur time bekommen sollten?
Wenn ein Termin über mehrere Tage geht, dann sollte vielleicht das datum in eine weitere Tabelle ausgelagert werden? Wieso, du hast doch
von
undbis
− jetzt sogar alsdatetime
.
Nein, ich meine wie auf dem zweiten Bild im ersten Posting zu sehen ist.
iCal-Import?
Wäre natürlich der Hammer. Genauso wie ein Import aus Google. Dazu Google habe ich eine Anleitung gefunden, die doch sehr kompiliziert ist, für iCal noch nichts.
Moin,
Mir scheint, dass Du beim Datenbankdesign zu sehr ans visuelle Design denkst und zu wenig ans logische Design.
Die Bedeuting von
datum
undganztags
ist mir noch nicht klar.Datum z.B. 2017-08-09 ganztags, dann wird der Termin über den ganzen Tag verteilt, wenn dieses nicht angeklickt wird, muss ein Zeitraum eingegeben werden, deshalb auch die Felder von - bis die dann nicht datetime sondern nur time bekommen sollten?
Für diese Bedeutung wäre ganztags
mit maximal 50 Zeichen aber ganz schön großzügig bemessen, denn es täte ja eigentlich auch ein Boolescher Wert (Ja/Nein). Aber …
Wenn ein Termin über mehrere Tage geht, dann sollte vielleicht das datum in eine weitere Tabelle ausgelagert werden? Wieso, du hast doch
von
undbis
− jetzt sogar alsdatetime
.Nein, ich meine wie auf dem zweiten Bild im ersten Posting zu sehen ist.
… wenn du von
und bis
als Datetime deklarierst, brauchst du weder datum
noch ganztags
:
DATE(von)
bzw. DATE(bis)
,TIME(von) == '0:00:00' AND TIME(bis) == '23:59:59
.iCal-Import? Wäre natürlich der Hammer. Genauso wie ein Import aus Google. Dazu Google habe ich eine Anleitung gefunden, die doch sehr kompiliziert ist, für iCal noch nichts.
Bei PEAR und PECL habe ich auf die schnelle nichts gefunden, aber es würde mich doch arg wundern, wenn es dafür keine Bibliothek gibt. Wobei andererseits das iCal-Format auch nicht sonderlich kompliziert aufgebaut ist.
Viele Grüße
Robert
Hallo,
Für diese Bedeutung wäre
ganztags
mit maximal 50 Zeichen aber ganz schön großzügig bemessen, denn es täte ja eigentlich auch ein Boolescher Wert (Ja/Nein). Aber …
Ok, dann ändere ich noch das Feld in ENUM?
… wenn du
von
undbis
als Datetime deklarierst, brauchst du wederdatum
nochganztags
:
- Das Datum ist einfach
DATE(von)
bzw.DATE(bis)
,- und ganztags heißt, dass
TIME(von) == '0:00:00' AND TIME(bis) == '23:59:59
.
Die Vorgabe ist, ein Kalender in Form von Google nachzubauen und da gibt es auch die Felder. Also nehme ich diese auch. Tut ja auch nichts zu sache? Außerdem kann ein Tag auch ein Arbeitstag lauten? Das ist mir einfach zu unsicher.
Bei PEAR und PECL habe ich auf die schnelle nichts gefunden, aber es würde mich doch arg wundern, wenn es dafür keine Bibliothek gibt. Wobei andererseits das iCal-Format auch nicht sonderlich kompliziert aufgebaut ist.
Für einen Import aus dem Google Kalender habe ich hier etwas gefunden: http://www.codefreaks.net/google-calendar-api-mit-php-nuetzen/
Moin,
Für diese Bedeutung wäre
ganztags
mit maximal 50 Zeichen aber ganz schön großzügig bemessen, denn es täte ja eigentlich auch ein Boolescher Wert (Ja/Nein). Aber …Ok, dann ändere ich noch das Feld in ENUM?
Oder INT(1)
, CHAR(1)
, … irgend etwas Passendes wird es da schon geben.
… wenn du
von
undbis
als Datetime deklarierst, brauchst du wederdatum
nochganztags
:
- Das Datum ist einfach
DATE(von)
bzw.DATE(bis)
,- und ganztags heißt, dass
TIME(von) == '0:00:00' AND TIME(bis) == '23:59:59
.Die Vorgabe ist, ein Kalender in Form von Google nachzubauen und da gibt es auch die Felder.
Das Datenmodell ist allerdings etwas Anderes als die Benutzeroberfläche. Ich kann mir kaum vorstellen, dass Google dein vorgeschlagenes Datenmodell verwendet. Außerdem kannst du aus aus den beiden Datetimes zur gewünschten Darstellung kommen – und umgekehrt auch.
Tut ja auch nichts zu sache? Außerdem kann ein Tag auch ein Arbeitstag lauten? Das ist mir einfach zu unsicher.
Und dann hat der eine Kalender einen ganzen Tag von 9 bis 17 Uhr, der andere aber von 0 Uhr bis Mitternacht. Wie willst du diese Fälle mit einem Flag ganztags
„erschlagen“?
Viele Grüße
Robert
Hallo BlaiiND98,
so vielleicht? Auch wenn sie wie Checkboxen sie aussehen, so sind sie doch Radio-Buttons, weil man ja nur eine Farbe auswählen kann.
Gruß
Julius
Hallo Julius,
genau so etwas habe ich gesucht. Dieses schaut sehr gut aus. Hab bisschen rumgespielt und versucht die Radio-Buttons gleich groß zu lassen auch wenn man reingeklickt hat, wie hier: https://codepen.io/stacy/pen/GpZvzN irgendwie will mir dieses leider nicht gelingen. Könntest du mir vielleicht sagen, wo ich etwas drehen muss?
Hab bisschen herumgespielt: https://codepen.io/anon/pen/dzqywK
Die Frage ist, benötige ich die kann das <label> nicht auch leer bleiben?
@@BlaiiND98
Die Frage ist, benötige ich die
Nein.
kann das <label> nicht auch leer bleiben?
LLAP 🖖
@@Julius
so vielleicht?
Nein, so nicht!
Es gibt gar keine Radiobuttons.
Merke: interaktive Elemente niemals per display: none
o.ä. verstecken, sondern visuell verstecken.
Wenn es sie gäbe: die Radiobuttons haben keine Beschriftung.
Die Beschriftung sollte im label
-Elementinhalt stehen, nicht nur als title
-Attribut. Visuell verstecken.
Bei Tastaturnavigation ist nicht erkennbar, wo der Fokus ist.
Also irgendwas Erkennbares für input[type="radio"]:focus + label
angeben.
So in etwa: Berichtigung
LLAP 🖖
So in etwa: Berichtigung
Es sieht scheiße aus was du hier zusammengebastelt hast (schwarzer Rand & Die Hacken sind nicht in der Mitte). Außerdem bleibe ich bei der Version von Julius
@@Sophie
So in etwa: Berichtigung
Es sieht scheiße aus was du hier zusammengebastelt hast
Es ging nicht ums Aussehen, sondern um die Bedienbarkeit.
Du kannst es gern hübscher machen, aber bedienbar sollte es sein – für alle.
Außerdem bleibe ich
?? Mal wieder als Sockenpuppe unterwegs?
LLAP 🖖
Hallo Gunnar Bittersmann,
?? Mal wieder als Sockenpuppe unterwegs?
Das ist auch meine Vermutung.
Bis demnächst
Matthias
Hallo Sophie,
mein -
hast du hierfür bekommen:
Es sieht scheiße aus was du hier zusammengebastelt hast
Konstruktive Kritik braucht keine Kraftausdrücke.
Viele Grüße
Robert
P.S.:
Die Hacken sind nicht in der Mitte).
Die Hacken sind an den Füßen.
@@Robert B.
Es sieht scheiße aus was du hier zusammengebastelt hast
Konstruktive Kritik braucht keine Kraftausdrücke.
Das wäre mir – ehrlich gesagt – scheißegal (Pun intended.)
Interessant an der Sache ist aber: bei „Rotz“ kotzen, aber „Scheiße“ in den Mund nehmen. Ein Schelm, wer ‚Troll‘ dabei denkt.
LLAP 🖖
Hi Gunnar,
Interessant an der Sache ist aber: bei „Rotz“ kotzen, aber „Scheiße“ in den Mund nehmen.
was glaubst du, wie viele Leute sich vor der Erkältungswelle ekeln, aber Fast Food essen 😉
Viele Grüße
Robert