Skip to content

Instantly share code, notes, and snippets.

@hissy
Last active August 29, 2015 14:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hissy/b45275c8a686185a067e to your computer and use it in GitHub Desktop.
Save hissy/b45275c8a686185a067e to your computer and use it in GitHub Desktop.
[concrete5] Add split form for date/time attribute type (5.6)

concrete5 has three form type for date/time attribute type (Both Date and Time, Date Only, Text Input Field). this codes enables to add additional form type

Override two files:

  • models/attribute/types/type_form.php
  • models/attribute/types/controller.php
<?php
defined('C5_EXECUTE') or die("Access Denied.");
class DateTimeAttributeTypeController extends Concrete5_Controller_AttributeType_DateTime {
public function form() {
$this->load();
$dt = Loader::helper('form/date_time');
$caValue = $this->getValue();
$html = Loader::helper('html');
switch($this->akDateDisplayMode) {
case 'text':
$form = Loader::helper('form');
print $form->text($this->field('value'), $this->getDisplayValue());
break;
case 'date':
$this->addHeaderItem($html->css('jquery.ui.css'));
$this->addHeaderItem($html->javascript('jquery.ui.js'));
print $dt->date($this->field('value'), $caValue);
break;
// <<< add custom form "split"
case 'split':
$form = Loader::helper('form');
$v = $this->getValue();
if ($v == '' || $v == false) {
$valueArray = array('','','');
} else {
$valueArray = array(
date('Y', strtotime($v)),
date('m', strtotime($v)),
date('d', strtotime($v)),
);
}
$keyArray = array(
range(date('Y')-100,date('Y')), // 100 years begfore to current year
range(1,12),
range(1,31)
);
print $form->select($this->field('value'), array_combine($keyArray[0], $keyArray[0]), $valueArray[0], array('class'=>'ccm-datetime-year'));
print $form->select($this->field('value1'), array_combine($keyArray[1], $keyArray[1]), $valueArray[1], array('class'=>'ccm-datetime-month'));
print $form->select($this->field('value2'), array_combine($keyArray[2], $keyArray[2]), $valueArray[2], array('class'=>'ccm-datetime-date'));
break;
// add custom form "split" >>>
default:
$this->addHeaderItem($html->css('jquery.ui.css'));
$this->addHeaderItem($html->javascript('jquery.ui.js'));
print $dt->datetime($this->field('value'), $caValue);
break;
}
}
public function saveForm($data) {
$this->load();
$dt = Loader::helper('form/date_time');
switch($this->akDateDisplayMode) {
case 'text':
$this->saveValue($data['value']);
break;
case 'date':
case 'date_time':
$value = $dt->translate('value', $data);
$this->saveValue($value);
break;
// <<< add custom form "split"
case 'split':
$value = $data['value'] . '-' . sprintf("%02d",$data['value1']) . '-' . sprintf("%02d",$data['value2']);
$this->saveValue($value);
break;
// add custom form "split" >>>
}
}
}
<fieldset>
<legend><?php echo t('Date/Time Options')?></legend>
<div class="clearfix">
<?php echo $form->label('akDateDisplayMode', t('Ask User For'))?>
<div class="input">
<?php
$akDateDisplayModeOptions = array(
'date_time' => t('Both Date and Time'),
'date' => t('Date Only'),
'split' => t('Split Input Field'), // add custom form "split"
'text' => t('Text Input Field')
);
?>
<?php echo $form->select('akDateDisplayMode', $akDateDisplayModeOptions, $akDateDisplayMode)?>
</div>
</div>
</fieldset>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment