Je règle le format jQuery Datepicker sur D d.m. affiché sous la forme Th 3.3. pour un champ méta personnalisé que je veux utiliser pour trier les messages. En SQL, le champ méta personnalisé est enregistré sous le nom D d.m.
Je voudrais afficher le D d.m. format sur le front-end et enregistrez-le sous le format mm-jj-aa ou 03-03-2011 dans ma base de données SQL.
Des idées?
Mon champ de saisie pour le champ méta personnalisé cp_date:
<input name="<?php echo $result->field_name; ?>" id="<?php echo $result->field_name; ?>" type="text" minlength="2" value="<?php if(isset($_POST[$result->field_name])) echo $_POST[$result->field_name]; ?>" autocomplete="off" class="datepicker <?php if($result->field_req) echo 'required' ?>" />
Premièrement, vous devez arrêter de stocker les dates au format D d.m
. Les requêtes ne pourront pas être triées en fonction de ces données.
Comme l'a souligné wyrfel, vous devez utiliser l'option de champ alternatif pour avoir deux champs, l'un indiquant le joli format de date (ou celui que vous avez choisi) et l'autre contenant la valeur stockée dans la base de données (dans un format les requêtes peuvent trier correctement, comme yy-mm-dd
).
Sur la base de la ligne de code que vous avez postée, tentez votre chance.
PHP/HTML: (pour remplacer le code que vous avez posté)
<?php
$date_valid = false;
if( isset( $_POST[$result->field_name] ) ) {
$date_parts = explode( '-', $_POST[$result->field_name] );
$date_valid = ( 3 == count( $date_parts ) )
// Validate date - checkdate returns true/false
? checkdate( $date_parts[1], $date_parts[2], $date_parts[0] )
: false;
}
$display_date = ( $date_valid ) ? date( 'D d.m', strtotime( implode( '-', $date_parts ) ) ) : '';
$storage_date = ( $date_valid ) ? $_POST[$result->field_name] : '';
$req = $result->field_req ? ' required' : '';
?>
<input type="text" value="<?php echo $display_date; ?>" class="datepicker<?php echo $req ?>" />
<input name="<?php echo $result->field_name; ?>" type="hidden" value="<?php echo $storage_date; ?>" class="date_alternate" />
Datepicker jQuery: (tirez simplement ce dont vous avez besoin)
jQuery(function($) {
$( ".datepicker" ).datepicker({
dateFormat: 'D d.m',
altField: ".date_alternate",
altFormat: "yy-mm-dd"
});
});
Ainsi, toutes vos dates sont stockées au format yy-mm-dd
, mais l'utilisateur la voit au format D d.m
.
J'ai testé cette approche localement et j'ai pu obtenir les fonctionnalités nécessaires. Voici quelques captures d'écran de ma page d'options de thème utilisant un champ de date et le format de date choisi (mon code était évidemment un peu différent de ce qui précède, mais l'approche était la même).
Sélection d'une date:
Les valeurs actuelles sont en bas dans la section "Live Fetch".
Ce que vous voyez après avoir cliqué sur une date dans le calendrier:
Valeurs visuelles et mémorisées:
Je pensais que ce serait peut-être agréable de voir le code mis en pratique et j'espère que cela aidera .. :)
veuillez consulter l'exemple du "champ alternatif" et le code source sur cette page . Faites de votre champ alternatif un champ caché, puis enregistrez la valeur du champ alternatif plutôt que celle visible dans vos métadonnées.
Ahh ... bien sûr, votre format de date pour le champ alternatif devrait être "aa-mm-jj".