ФОРМЫ / ФОРМА "ЗАКАЗАТЬ ЗВОНОК" В МОДАЛЬНОМ ОКНЕ НА BOOTSTRAP

Заметка создана: 15 января 2025 г.
Вызов формы
<button type="button" class="button" data-bs-toggle="modal" data-bs-target="#basicModal" >
         <i class="fa fa-phone"></i> <span>Заказать звонок</span>
</button>

Добавить в Макет

<div class="modal fade" id="basicModal" tabindex="-1" role="dialog">
     <div class="modal-dialog">
       <div class="modal-content">
          <div class="modal-header"><button class="close" type="button" data-dismiss="modal">x</button> </div>
        <div class="modal-body">

      <?php
        // add ФОРМА ЗАКАЗАТЬ ЗВОНОК
        $oForm = Core_Entity::factory('Form', 5);  // Заменить id формы
        $Form_Controller_Show = new Form_Controller_Show($oForm);
       if (!is_null(Core_Array::getPost($oForm->button_name)))
          {
         $Form_Controller_Show
         ->values($_POST + $_FILES)
         // 0 - html, 1- plain text
         ->mailType(1)
         ->mailXsl(
            Core_Entity::factory('Xsl')->getByName('ПисьмоКураторуФормы')
         )
         ->mailFromFieldName('mail@spartika.ru')
         ->process();

        // Отправляем письмо-подтверждение пользователю
        $Form_Controller_Show1 = clone $Form_Controller_Show;
        $sEmail = Core_Array::get($Form_Controller_Show1->values, 'email');
        if (Core_Valid::email($sEmail)){
            ob_start();
            $Form_Controller_Show1
                ->xsl(
                    Core_Entity::factory('Xsl')->getByName($Form_Controller_Show1->mailType == 0 ? 'ПисьмоПодтверждениеПользователюФормыВФорматеHTML' : 'ПисьмоПодтверждениеПользователюФормы')
                )
                ->show();
            $sMailText = ob_get_clean();
            if (mb_strpos($sMailText, 'ERROR TRUE') === FALSE){
                $subject = 'Вами была заполнена форма обратного звока на сайте  jvern.club';// Тема письма отредактировать
                // При текстовой отправке нужно преобразовать HTML-сущности в символы
                $Form_Controller_Show->mailType == 1 && $sMailText = html_entity_decode(strip_tags($sMailText), ENT_COMPAT, 'UTF-8');
                $oCore_Mail = Core_Mail::instance()
                    ->to($sEmail)
                    ->from(EMAIL_TO)
                    ->subject($subject)
                    ->message(trim($sMailText))
                    ->contentType($Form_Controller_Show->mailType == 0 ? 'text/html' : 'text/plain')
                    ->header('X-HostCMS-Reason', 'Form');
                // Массив содержащий пути прикрепленных файлов и их имена
                $aForm_Fields = $oForm->Form_Fields->findAll();
                foreach ($aForm_Fields as $oForm_Field){
                    if ($oForm_Field->type == 2){// File
                        $value = Core_Array::get($Form_Controller_Show->values, $oForm_Field->name);
                        if (!is_null($value)){
                            if (is_array($value) && $value['size'] > 0){
                                $oForm_Fill_Fields = Core_Entity::factory('Form_Fill_Field');
                                $oForm_Fill_Fields->queryBuilder()
                                    ->where('form_field_id', '=', $oForm_Field->id)
                                    ->where('value', '=', $value['name'])
                                    ->limit(1);
                                $aForm_Fill_Fields = $oForm_Fill_Fields->findAll();
                                if (isset($aForm_Fill_Fields[0])){
                                    $oCore_Mail->attach(array(
                                        'filepath' => $aForm_Fill_Fields[0]->getPath(),
                                        'filename' => $value['name']
                                    ));
                                }
                            }
                        }
                    }
                }

                $oCore_Mail->send();
            }
        }
        // END add
              }
                $Form_Controller_Show
                  ->xsl(
                  Core_Entity::factory('Xsl')->getByName('ОтобразитьФорму')
                 )
                  ->show();
              ?>
        </div>
    </div>
  </div>
</div>

XSL

// XSL-шаблон "ПисьмоПодтверждениеПользователюФормы"
<xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:hostcms="http://www.hostcms.ru/"
exclude-result-prefixes="hostcms">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:template match="/">
<xsl:choose>
<xsl:when test="form/success/node() and form/success = 1"><xsl:apply-templates select="/form"/></xsl:when>
<xsl:otherwise>ERROR TRUE</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match='/form'>
<p><b>Здравствуйте, <span><xsl:value-of disable-output-escaping="yes" select="form_field[@id=1]/value" /></span>!</b></p>
<p>Вы заполнили Форму на сайте egeriya.ru</p>
<!-- Вывод разделов формы 0-го уровня -->
<xsl:apply-templates select="form_field_dir[.//form_field[value != ''][1]]" />
<!-- Вывод списка полей формы 0-го уровня -->
<xsl:apply-templates select="form_field[value != '']" />
<p>В ближайшее время с Вами свяжется наш менеджер.<br />
Благодарим за доверие!</p>
<p>Команда интернет-магазина "Эгерия"</p>
<p><a href="http://egeriya.ru">egeriya.ru</a></p>
<xsl:value-of select="nameg"/>
</xsl:template>
<xsl:template match="form_field_dir">
- <xsl:value-of select="name" />
<!-- Вывод списка полей формы -->
<xsl:apply-templates select="form_field[value != '']" />
<!-- Вывод разделов формы -->
<xsl:apply-templates select="form_field_dir[.//form_field[value != ''][1]]" />
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="form_field">
<xsl:value-of select="caption"/>:<xsl:text> </xsl:text><xsl:choose><xsl:when test="values/node()"><xsl:apply-templates select="values/value"/></xsl:when><xsl:otherwise><xsl:value-of select="value" /></xsl:otherwise></xsl:choose><xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="values/value"><xsl:variable name="currentValue" select="." /><xsl:value-of select="../../list/list_item[@id=$currentValue]/value"/><xsl:if test="position() != last()"><xsl:text>, </xsl:text></xsl:if></xsl:template>
</xsl:stylesheet>
//XSL-шаблон "ПисьмоПодтверждениеПользователюФормыВФорматеHTML"
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:hostcms="http://www.hostcms.ru/"
exclude-result-prefixes="hostcms">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:template match="/">
<xsl:choose>
<xsl:when test="form/success/node() and form/success = 1"><xsl:apply-templates select="/form"/></xsl:when>
<xsl:otherwise>ERROR TRUE</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="/form">
<p><b><xsl:value-of disable-output-escaping="yes" select="name"/></b></p>
<p>Вы заполнили Форму на сайте egeriya.ru</p>
<!-- Вывод разделов формы 0-го уровня -->
<xsl:apply-templates select="form_field_dir[.//form_field[value != ''][1]]" />
<!-- Вывод списка полей формы 0-го уровня -->
<xsl:apply-templates select="form_field[value != '']" />
</xsl:template>
<xsl:template match="form_field_dir">
<p><b><xsl:value-of select="name" /></b></p>
<!-- Вывод списка полей формы -->
<xsl:apply-templates select="form_field[value != '']" />
<!-- Вывод разделов формы -->
<xsl:apply-templates select="form_field_dir[.//form_field[value != ''][1]]" />
</xsl:template>
<xsl:template match="form_field">
<p>
<b>
<xsl:value-of select="caption" disable-output-escaping="yes"/>
</b>:
<xsl:choose>
<xsl:when test="values/node()">
<xsl:apply-templates select="values/value"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="value" />
</xsl:otherwise>
</xsl:choose>
</p>
</xsl:template>
<xsl:template match="values/value"><xsl:variable name="currentValue" select="." /><xsl:value-of select="../../list/list_item[@id=$currentValue]/value"/><xsl:if test="position() != last()"><xsl:text>, </xsl:text></xsl:if></xsl:template>
</xsl:stylesheet>