Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Наверняка у пользователей бывали случаи когда, например, нужно поменять почту в подвале сайта.
Сам не разбирается как это сделать через код, а до программиста вечно не дозвонишься и не допишешься.
 
Или у разработчиков бывали моменты, когда необходимо создать динамическое поле для вывода данных во front. Например номер телефона.  Это нужно было лезть в backand и править как минимум 2 файла.
 
Сам ни раз с этим сталкивался. Поэтому решил написать следующее дополнение в виде создания произвольных переменных, для их последующего вывода в шаблон, и их редактирование из админки.
 
Скрины во вложении
 
И так, к установке:
 
1. Добавим через phpmyadmin в MySQL базу новый SQL запрос
CREATE TABLE IF NOT EXISTS `s_newmyvariables` (
`newmyvariables_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT '',
`label` text NOT NULL,
PRIMARY KEY (`newmyvariables_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=193 ;


INSERT INTO `s_newmyvariables` (`newmyvariables_id`, `name`, `label`) VALUES
(191, 'myvar_phones', 'Телефон'),
(180, 'myvar_email', 'Почта');

 

2. Зальём файл Newmyvariables.php в папку api/ (он во вложении и в архиве)
 
3. Открываем файл api/Simpla.php
 
после строки
'settings' => 'Settings',

пишем

'newmyvariables'=> 'Newmyvariables', 

 

4. Далее открываем simpla/SettingsAdmin.php
 
после строки
$this->design->assign('managers', $managers);

пишем

$this->design->assign('newmyvariables', $this->newmyvariables);
$this->design->assign('myvar', $this->newmyvariables->get_newmyvariables());

 

5. В этом же файле (чуть ниже)
 
после строки
if($this->request->method('POST'))
{

пишем

if (!empty($_POST['new_name']) && !empty($_POST['new_name_label'])) {
    $names[0] = 'myvar_'.$this - > request - > post('new_name');
    $names[1] = $this - > request - > post('new_name_label');
    $this - > newmyvariables - > new_name = $names;
}

$this - > design - > assign('myvar', $this - > newmyvariables - > get_newmyvariables());
foreach($_POST as $key => $value) {
    if (strpos($key, 'myvar') === 0) {
        $this - > settings - > $key = $value;
    }
}

 

6. И последний файл simpla/design/html/settings.tpl

 

находим и заменяем (почти в самом конце)

<input class="button_green button_save" type="submit" name="save" value="Сохранить" />

заменяем на

<!-- Свои переменные -->
<div class="block layer" id="my-per">
   <h2>Новые переменные</h2>
   <ul>
      {foreach from=$myvar key=k item=v}
      <li style="width: 900px;">
         <label class=property>{$v}:</label>
         <input name="{$k}" class="simpla_inp" type="text" value="{$settings->$k|escape}" />
         <label style="margin-left: 25px;">{literal}{$settings->{/literal}{$k}{literal}|escape}{/literal}</label>
      </li>
      {/foreach}
   </ul>
</div>
<div class="block">
   <h2>Добавление переменной</h2>
   <ul>
      <li><label class=property>Описание переменной</label><input name="new_name_label" class="simpla_inp" type="text" minlength="3" maxlength="20" placeholder="Описание"/></li>
      <li><label class=property>Имя переменной</label><input name="new_name" class="simpla_inp inp2" minlength="6" maxlength="20" placeholder="Уникальное название" type="text" /></li>
   </ul>
</div>
<input class="button_green button_save" type="submit" id="submit" name="save" value="Сохранить" />
<div class="block">
   <h2 id="warning">Переменная с таким именем уже существует!</h2>
</div>
<!-- Свои переменные (The End)-->

 

7. В самом конце файла

 

после (действительно в самом конце)

{literal}
<script>
    $(function() {
        $('#change_password_form').hide();
        $('#change_password').click(function() {
            $('#change_password_form').show();
        });
    }); 
</script>
{/literal} 

пишем

{literal}
<script>
    $(function() {
        $('#warning').hide();
        //var input = $('#new-var>input[name="new_name"]');
        $('input[name="new_name"]').on('keyup', function() {
            $('#my-per').find("input").each(function() {
                if ($(this).attr('name') == 'myvar_' + $('input[name="new_name"]').val()) {
                    $('#warning').show();
                    $("#submit").attr("disabled", "disabled"); // Запрещаем отправку формы
                    return false;
                } else {
                    $('#warning').hide();
                    $("#submit").removeAttr("disabled"); // Запрещаем отправку формы

                }
            });
        })
    })
</script>
{/literal}

 

Если всё делать по инструкции, то встанет без ошибки «500»
 
P.S. На хорошую оценку не претендую (написал как смог) и оно вполне рабочее. 
 
Что предусмотрел:
1. При добавлении одинаковых полей, происходит предупреждение о том, что такое поле существует и не добавляет его.
2. При добавлении новой переменной без «описания», сохранение происходит, но не записывает поле в базу.

 

 

 

post-18294-0-94515100-1531943378_thumb.png

post-18294-0-13974300-1531943381_thumb.png

post-18294-0-93066600-1531943382_thumb.png

post-18294-0-00217100-1531943385_thumb.png

Newmyvariables.php.zip

Изменено пользователем Chudo
Ссылка на сообщение
Поделиться на другие сайты

Товарищ Огурцов в старом фильме говорил:

- Так, ну что ж, товарищи, коллектив большой, народ квалифицированный, работа проделана большая, у меня лично сомнений нет, это дело так не пойдёт...

 

Это не решение для CMS, одной из основных черт которой является простота. Это монстр. То, что можно и нужно было бы делать работой в двух файлах - tpl и php - добавлением двух-трех несложных  вставочек, автор раздул до невероятных масштабов - тут и файл новый, и таблица новая...

 

Предлагаемое решение - пример того, как можно безобразно усложнить простую задачу...

Ссылка на сообщение
Поделиться на другие сайты

Товарищ Огурцов в старом фильме говорил:

- Так, ну что ж, товарищи, коллектив большой, народ квалифицированный, работа проделана большая, у меня лично сомнений нет, это дело так не пойдёт...

 

Это не решение для CMS, одной из основных черт которой является простота. Это монстр. То, что можно и нужно было бы делать работой в двух файлах - tpl и php - добавлением двух-трех несложных  вставочек, автор раздул до невероятных масштабов - тут и файл новый, и таблица новая...

 

Предлагаемое решение - пример того, как можно безобразно усложнить простую задачу...

 

Уважаемый, Phukortsin.

Я писал данное решени не для Вас конкретно, поэтому критика в плане "Нужно или не нужно" здесь не уместна.

 

Давайте разберём по существу...

 

Это решение облегчит управление сайтом его владельцам, которые не понимают ничего в работе двух файлах - tpl и php.

Данное решение может установить программист, для того, что бы его меньше дёргали по разным пустякам.

 

А впрочем, не нравится решение, делайте ручками.

Ссылка на сообщение
Поделиться на другие сайты

Доработка полезная но можно значительно проще сделать переменную в самом шаблоне. К примеру объявить в index.tpl 

 

{$phone_number = '1234567890'}
 

и выводить 

 

{$phone_number}
 

в нужных местах шаблона.

Изменено пользователем luxury
Ссылка на сообщение
Поделиться на другие сайты

Доработка полезная но можно значительно проще сделать переменную в самом шаблоне. К примеру объявить в index.tpl 

 

{$phone_number = '1234567890'}
 

 

и выводить 

 

{$phone_number} 
 

 

в нужных местах шаблона. 

 

Благодарю, Luxury. Вариантов, которые были проще в реализации - достаточно много. Твой не исключение =)

 

У меня была масса причин сделать именно так)

 

Думаю ещё доработать, и сделать удаление переменных, так же, по-клику из админ панели.

Ссылка на сообщение
Поделиться на другие сайты

Давайте разберём по существу...

Отличная идея.

 

1. Я писал данное решени не для Вас конкретно, поэтому критика в плане "Нужно или не нужно" здесь не уместна.

2. Это решение облегчит управление сайтом его владельцам

3. Данное решение может установить программист, для того, что бы его меньше дёргали по разным пустякам.

4. А впрочем, не нравится решение, делайте ручками.

1. Не понял, к чему это сказано. Критики в плане "Нужно или не нужно" с моей стороны не было...

2. Согласен.

3. Не понял, к чему это сказано. Данное решение может установить как программист, так и любой другой человек...

4. Тоже не понятно, к чему это сказано.

 

Если Вы прочтете повнимательнее мое замечание, то должны бы понять, что моя главная мысль - только в том, что предложенное решение экстремально сложно и потому крайне нерационально. Надо бы подобные решения писать намного проще и легче...

Ссылка на сообщение
Поделиться на другие сайты

Отличная идея.

 

1. Не понял, к чему это сказано. Критики в плане "Нужно или не нужно" с моей стороны не было...

2. Согласен.

3. Не понял, к чему это сказано. Данное решение может установить как программист, так и любой другой человек...

4. Тоже не понятно, к чему это сказано.

 

Если Вы прочтете повнимательнее мое замечание, то должны бы понять, что моя главная мысль - только в том, что предложенное решение экстремально сложно и потому крайне нерационально. Надо бы подобные решения писать намного проще и легче...

 

Возможно я был несколько резок в своём ответе, и не правильно понял Вашу мысль. 

 

Я смотрел много различных доработок в пределах данного форума, и думал так же как Вы.

 

Но, возможно для кого-нибудь, это будет необходимым решением. Как для меня, например.

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...