Jump to content

Recommended Posts

Наверняка у пользователей бывали случаи когда, например, нужно поменять почту в подвале сайта.
Сам не разбирается как это сделать через код, а до программиста вечно не дозвонишься и не допишешься.
 
Или у разработчиков бывали моменты, когда необходимо создать динамическое поле для вывода данных во 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

Edited by Chudo
Link to post
Share on other sites

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

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

 

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

 

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

Link to post
Share on other sites

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

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

 

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

 

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

 

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

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

 

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

 

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

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

 

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

Link to post
Share on other sites

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

 

{$phone_number = '1234567890'}
 

и выводить 

 

{$phone_number}
 

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

Edited by luxury
Link to post
Share on other sites

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

 

{$phone_number = '1234567890'}
 

 

и выводить 

 

{$phone_number} 
 

 

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

 

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

 

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

 

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

Link to post
Share on other sites

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

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

 

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

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

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

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

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

2. Согласен.

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

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

 

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

Link to post
Share on other sites

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

 

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

2. Согласен.

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

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

 

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

 

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

 

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

 

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

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...