Перейти к содержимому


Фото
* * * * * 1 голосов

Создание новых произвольных переменных, для их последующего вывода в шаблон

Переменная настройки произвольная сам сделаю дополнение упрощаем телефон автоматически

  • Чтобы отвечать, сперва войдите на форум
7 ответов в теме

#1 Chudo

Chudo
  • Пользователь
  • 86 сообщений
  • Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Саратов

Опубликовано 18.07.2018 - 23:52

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

 

 

 

Прикрепленные файлы:

  • Прикрепленный файл  1.png   422,27К   36 раз скачано
  • Прикрепленный файл  2.png   423,76К   38 раз скачано
  • Прикрепленный файл  3.png   441,97К   32 раз скачано
  • Прикрепленный файл  4.png   430,67К   30 раз скачано
  • Прикрепленный файл  Newmyvariables.php.zip   815байт   7 раз скачано

Изменено: Chudo, 19.07.2018 - 00:20


#2 Chudo

Chudo
  • Пользователь
  • 86 сообщений
  • Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Саратов

Опубликовано 18.07.2018 - 23:55

Уважаемый модератор!

Если не сложно, то перенесите данную тему в раздел «Готовые решения»



#3 phukortsin

phukortsin
  • Пользователь
  • 469 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 19.07.2018 - 14:11

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

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

 

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

 

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



#4 Chudo

Chudo
  • Пользователь
  • 86 сообщений
  • Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Саратов

Опубликовано 19.07.2018 - 17:00

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

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

 

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

 

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

 

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

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

 

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

 

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

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

 

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



#5 luxury

luxury
  • Пользователь
  • 157 сообщений
  • Заказчик

Опубликовано 19.07.2018 - 18:05

Доработка полезная но можно значительно проще сделать переменную в самом шаблоне. К примеру объявить в index.tpl 
 
{$phone_number = '1234567890'}
 
и выводить 
 
{$phone_number}
 
в нужных местах шаблона.

Изменено: luxury, 19.07.2018 - 18:08


#6 Chudo

Chudo
  • Пользователь
  • 86 сообщений
  • Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Саратов

Опубликовано 19.07.2018 - 18:11

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

 

{$phone_number = '1234567890'}
 

 

и выводить 

 

{$phone_number} 
 

 

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

 

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

 

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

 

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



#7 phukortsin

phukortsin
  • Пользователь
  • 469 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 19.07.2018 - 18:14

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


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

 

1. Я писал данное решени не для Вас конкретно, поэтому критика в плане "Нужно или не нужно" здесь не уместна.
2. Это решение облегчит управление сайтом его владельцам
3. Данное решение может установить программист, для того, что бы его меньше дёргали по разным пустякам.
4. А впрочем, не нравится решение, делайте ручками.


1. Не понял, к чему это сказано. Критики в плане "Нужно или не нужно" с моей стороны не было...
2. Согласен.
3. Не понял, к чему это сказано. Данное решение может установить как программист, так и любой другой человек...
4. Тоже не понятно, к чему это сказано.

 

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



#8 Chudo

Chudo
  • Пользователь
  • 86 сообщений
  • Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Саратов

Опубликовано 19.07.2018 - 18:18

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

 


1. Не понял, к чему это сказано. Критики в плане "Нужно или не нужно" с моей стороны не было...
2. Согласен.
3. Не понял, к чему это сказано. Данное решение может установить как программист, так и любой другой человек...
4. Тоже не понятно, к чему это сказано.

 

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

 

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

 

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

 

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







Также с меткой «Переменная, настройки, произвольная, сам сделаю, дополнение, упрощаем, телефон, автоматически»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых