Новосибирск +7(983)

По всем вопросам :

Телеграм : @radgura

Дорабатываем компонент записи на прием Appointment Book Manager 1.4.1 (jxtcappbook) - добавляем места

Заказать доработку
Joomla 3x

Стоимость 400


@radgura.ru
Адриена Лежена
63089
Новосибирск
Адриена Лежена
+7(983)
3067856
Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Дорабатываем Appointment Book Manager 1.4.1 (jxtcappbook) - добавляем места

Вы можете Заказать доработку 400руб. RUB

В данной статье расскажу, как реализовали запись в класс, через компонент Appointment Book Manager. 

Стандартная реализация позволяет зарегистрировать 1 человека в один отведенный час, после чего выводилась отметка, что данный час занят. Нам требовалось плавающие значение от 3 до 23 человек на один час.

Редактируем административную часть компонента

1.Необходимо добавить поле place_count int(11) в таблицу #_jxtc_appbook_calendars

2.Добавляем новую переменную - кол-во мест, файл

/administrator/components/com_jxtcappbook/tables/calendars.php

После строки:

var $article_id = 0;

Добавляем:

var $article_id = 0;
var $place_count = 0;

3.Редактируем файл формы:

/administrator/components/com_jxtcappbook/views/parent/tmpl/form.php

После кода:

// do field validation
var error = '';
if (form.title.value == "") {
error = error + "<?php echo JText::_('APPBOOK_ERRORCALENDARMUSTHAVEANAME', true); ?>\n";
}

Добавляем код:

// do field validation
var error = '';
if (form.title.value == "") {
error = error + "<?php echo JText::_('APPBOOK_ERRORCALENDARMUSTHAVEANAME', true); ?>\n";
}
var error = '';
if (form.place_count.value == ""){
error = error + "<?php echo 'Не правильно указано кол-во мест'; ?>\n";
}
var error = '';
if (form.place_count.value < 1 ){
error = error + "<?php echo 'Не правильно указано кол-во мест'; ?>\n";
}

 4.Добавляем поле "Кол-во мест", файл:

/administrator/components/com_jxtcappbook/views/parent/tmpl/form_tab1.php

Добавляем в конец файла код:

<div class="control-group">
<div class="control-label">
<span class="hasTip" title="Place Count::Count of place.">
<?php echo 'Кол-во мест'; ?>:
</span>
</div>
<div class="controls">
<input class="inputbox required" type="number" name="place_count" id="place_count" size="60" value="<?php echo $this->row->place_count; ?>" />
</div>
</div>

5.Добавляем заголовки, файл

/administrator/components/com_jxtcappbook/views/parents/tmpl/default.php

Меняем код:

<?php echo JHTML::_('grid.sort', 'Calendar Name', 'p.title', @$this->lists['order_Dir'], @$this->lists['order'] ); ?>

На:

<?php echo JHTML::_('grid.sort', 'Наименование курса', 'p.title', @$this->lists['order_Dir'], @$this->lists['order'] ); ?>
</th>
<th class="title">
<?php echo JHTML::_('grid.sort', 'Кол-во мест', 'p.title', @$this->lists['order_Dir'], @$this->lists['order'] ); ?>
</th>

Далее меняем код:

<td>
<span class="editlinktip hasTip" title="<?php echo JText::_('APPBOOK_EDITCALENDAR');?>::<?php echo $row->title; ?>">
<a href="/<?php echo $link ?>">
<?php echo $row->title; ?></a></span>
</td>

На это:

<td>
<span class="editlinktip hasTip" title="<?php echo JText::_('APPBOOK_EDITCALENDAR');?>::<?php echo $row->title; ?>">
<a href="/<?php echo $link ?>"><?php echo $row->title; ?></a></span>
</td>

<td>
<span class="editlinktip hasTip" title="<?php echo $row->place_count;?>">
<a href="/<?php echo $link ?>">
<?php echo $row->place_count;?>
</a></span>
</td>

Редактируем лицевую часть компонента

1.Дорабатываем заглушку

\components\com_jxtcappbook\templates\default\picker\default.php

Добавляем код после 101 строки,где есть строка:

$fullTimetable[] = $startKey;

Добавляем:

// вычисляем кол-во занятых мест
$query = 'SELECT *,dayofmonth(date) as day FROM #__jxtc_appbook_appointments WHERE published=1 AND parent_id=' . $this->calendar_id . ' AND year(date) = ' . $this->y . ' AND month(date) = ' . $this->m . ' and start="'.$startKey.'" ORDER BY date, start';
$db->setQuery($query);
$appointments = $db->loadObjectList();
$app_count = $db->getAffectedRows ();

Далее меняем блок "заглушку" на 106 строке:

if ($this->d < $this->today_d && $this->y <= $this->today_y && $this->m <= $this->today_m) {
$timetableHTML .= '<td class="' . $this->suf . 'timeSlot timeBusy">' . JText::_('NOTAVAILABLE') . '</td>';
} elseif (isset($timetable[$this->d][$startKey])) {
$timetableHTML .= '<td class="' . $this->suf . 'timeSlot timeBusy">' . JText::_('OCCUPIED') . '</td>';
} elseif (!$isWorkDay) {
$timetableHTML .= '<td class="' . $this->suf . 'timeSlot timeBusy">' . JText::_('NOTAVAILABLE') . '</td>';
} else {
$timetableHTML .= '<td class="' . $this->suf . 'timeSlot timeFree" ><input type="radio" name="appointment" value="' . $startKey . '" onclick="changeTimes(\'' . $calendar->min_duration . '\',\'' . $startKey . '\',\'' . $endKey . '\')"/></td>';
}

Меняем на:

if ($this->d < $this->today_d && $this->y <= $this->today_y && $this->m <= $this->today_m) 
{
$timetableHTML .= '<td class="' . $this->suf . 'timeSlot timeBusy">' . JText::_('NOTAVAILABLE') . '</td>';
} elseif (isset($timetable[$this->d][$startKey]))
//закончилось кол-во мест
{
if ($app_count<$total_place_count)
{
$timetableHTML .= '<td class="' . $this->suf . 'timeSlot timeFree" ><input type="radio" name="appointment" value="' . $startKey . '" onclick="changeTimes(\'' . $calendar->min_duration . '\',\'' . $startKey . '\',\'' . $endKey . '\')"/><p>'.$app_count.'/'.$total_place_count.'</p></td>';
}
if ($app_count>=$total_place_count)
{
$timetableHTML .= '<td class="' . $this->suf . 'timeSlot timeBusy">' . JText::_('OCCUPIED') . '</td>';
}
}
//нет курсов
elseif (!$isWorkDay) {
$timetableHTML .= '<td class="' . $this->suf . 'timeSlot timeBusy">' . JText::_('NOTAVAILABLE') . '</td>';
} else {
$timetableHTML .= '<td class="' . $this->suf . 'timeSlot timeFree" ><input type="radio" name="appointment" value="' . $startKey . '" onclick="changeTimes(\'' . $calendar->min_duration . '\',\'' . $startKey . '\',\'' . $endKey . '\')"/><p>'.$app_count.'/'.$total_place_count.'</p></td>';
}

 2.Редактируем имя календаря, открываем файл:

components/com_jxtc_appbook_j30/site/templates/default/calendars/default.php

Меняем код:

echo '<div id="appbook">';
foreach ($this->rows as $row) {
switch ($this->config->formMode) {
case 's':
$bookingURL = '<a href="'.JRoute::_('index.php?option=com_jxtcappbook&view=book&pid='.$row->id).'" alt="'.JText::_(strip_tags($appointmentButton)).'">'.$appointmentButton.'</a>';
break;
case 'n':
$bookingURL = '<a target ="_blank" href="'.JRoute::_('index.php?option=com_jxtcappbook&view=book&pop=1&tmpl=component&pid='.$row->id).'" alt="'.JText::_(strip_tags($appointmentButton)).'">'.$appointmentButton.'</a>';
$URL = JRoute::_('index.php?option=com_jxtcappbook&view=book&pop=1&tmpl=component&pid='.$row->id);
$bookingURL = '<a href="/" onclick="MyWindow=window.open(\''.$URL.'\',\'_blank\',\'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width='.$this->config->width.',height='.$this->config->height.',left=200,top=200\'); return false;" alt="'.JText::_(strip_tags($appointmentButton)).'">'.$appointmentButton.'</a>';
break;
case 'm':
$bookingURL = '<a class="modal" rel="{handler: \'iframe\', size: {x: '.$this->config->width.', y: '.$this->config->height.'}}" href="'.JRoute::_('index.php?option=com_jxtcappbook&view=book&pop=2&tmpl=component&pid='.$row->id).'" alt="'.JText::_(strip_tags($appointmentButton)).'">'.$appointmentButton.'</a>';
break;
}
// $bookingURL = '<a class="modal" href="/component/jxtcappbook/?tmpl=component&view=item&pid='.$row-&gt;id_'=" alt="'
// .JText::_(strip_tags($appointmentButton)).'" rel="{handler: \'iframe\', size: {x: 680, y: 750}}">'.$appointmentButton.'</a>';
$row->description = str_replace('{booking_form}',$bookingURL,$row->description);
echo '<div class="calendar">';
echo $row->description;
echo '</div>';
}

На это: 

$db = JFactory::getDBO();
echo '<div id="appbook">';
foreach ($this->rows as $row) {
$queryss= $db->getQuery(true);
$queryss ='SELECT title FROM #__jxtc_appbook_calendars WHERE id=' . $row->id;
$db->setQuery($queryss);
$calendarsss = $db->loadRow();
switch ($this->config->formMode) {
case 's':
$bookingURL = '<a href="'.JRoute::_('index.php?option=com_jxtcappbook&view=book&pid='.$row->id).'" alt="'.JText::_(strip_tags($appointmentButton)).'">'.$appointmentButton.' - '.$calendarsss[0].'</a>';
break;
case 'n':
$bookingURL = '<a target ="_blank" href="'.JRoute::_('index.php?option=com_jxtcappbook&view=book&pop=1&tmpl=component&pid='.$row->id).'" alt="'.JText::_(strip_tags($appointmentButton)).'">'.$appointmentButton.' - '.$calendarsss[0].'</a>';
$URL = JRoute::_('index.php?option=com_jxtcappbook&view=book&pop=1&tmpl=component&pid='.$row->id);
$bookingURL = '<a href="/" onclick="MyWindow=window.open(\''.$URL.'\',\'_blank\',\'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width='.$this->config->width.',height='.$this->config->height.',left=200,top=200\'); return false;" alt="'.JText::_(strip_tags($appointmentButton)).'">'.$appointmentButton.' - '.$calendarsss[0].'</a>';
break;
case 'm':
$bookingURL = '<a class="modal" rel="{handler: \'iframe\', size: {x: '.$this->config->width.', y: '.$this->config->height.'}}" href="'.JRoute::_('index.php?option=com_jxtcappbook&view=book&pop=2&tmpl=component&pid='.$row->id).'" alt="'.JText::_(strip_tags($appointmentButton)).'">'.$appointmentButton.' - '.$calendarsss[0].'</a>';
break;
}
// $bookingURL = '<a class="modal" href="/component/jxtcappbook/?tmpl=component&view=item&pid='.$row-&gt;id_'=" alt="'
// .JText::_(strip_tags($appointmentButton)).'" rel="{handler: \'iframe\', size: {x: 680, y: 750}}">'.$appointmentButton.'</a>';
$row->description = str_replace('{booking_form}',$bookingURL,$row->description);
echo '<div class="calendar">';
echo $row->description;
echo '</div>';
}

 Итого

Если вы правильно все сделали, то в административной части, при редактировании календаря, можно указать кол-во свободных мест. В лицевой части появится "Места". как показано на изображении.

Комментарии (0)

Здесь ещё нет оставленных комментариев.

Оставьте свой комментарий

  1. Добавление комментария от гостя.
Вложения (0 / 3)
Share Your Location

Как с нами связаться

По всем вопросам пишите  

Телеграм: @radgura

OnLine заказ

Отправить сообщение

Нажимая на кнопку «Отправить сообщение», я соглашаюсь:
* с условиями публичной оферты
* обработку моих персональных данных


RAD компоненты

Please publish modules in offcanvas position.