Chudo Posted July 16, 2018 Report Share Posted July 16, 2018 (edited) Всем доброго дня, друзья! Задался я тут написанием модуля (не коммерческим). Идея следующая:Создание собственной переменной для её последующего вывода во front. Скорее всего моё решение не рационально, со стороны программирования, но для решения моих задач, вполне подходит. Собственно, это как создать новое поле в настройках и вывести его во front {$settings->company_phone|escape} _________________________________ Помогите пожалуйста привести переменную к желаемому виду. Есть рабочий вывод параметров циклом [работает] {get_myvariables var=myvariable} {if $myvariable} {foreach $myvariable as $m} {if $m->image} {if $m->description} {$m->description} {/if} {/if} {/foreach} {/if} Конкретный параметр выводу по id [работает] {get_myvariables var=myvariable} {if $myvariable} {foreach $myvariable as $m} {if $m->id == 1} {if $m->description} {$m->description} {/if} {/if} {/foreach} {/if} Во View.php написан следующий код: Настроил плагин для смарти $this->design->smarty->registerPlugin("function", "get_myvariables", array($this, 'get_myvariables_plugin')); и сам плагин public function get_myvariables_plugin($params, &$smarty) { if(!empty($params['var'])) $smarty->assign($params['var'], $this->myvariables->get_myvariables($params)); } Но не могу понять, как мне привести значение переменной, как например у настроек {$settings->company_phone|escape} что бы у меня работал следующий вывод {$myvariables->name_myvariable} где name_myvariable - это имя нового элемента созданного в админке а выводить созданная переменная должна заполненное текстовое поле description _____________________________________________________________________________________ Если что-то не понятно описал, могу выложить все файлики и запросы к базе.В планах выложить его в паблик, для дальнейшего использования и доработок Структура базы - прикреплённый файл Edited July 16, 2018 by Chudo Quote Link to post Share on other sites
Maksclub Posted July 16, 2018 Report Share Posted July 16, 2018 (edited) Но не могу понять, как мне привести значение переменной, как например у настроек Не городить этот огород (а старый удалить) и просто создать поле в БДСоздать в шаблоне /simpla/design/html/setings.tpl инпут или textarea с уникальным name, например <li><label class=property>Оповещение о заказах</label><input name="company_phone" class="simpla_inp" type="text" value="{$settings->order_company_phone|escape}" /></li> И в контроллере /simpla/SettingAdmin.php просто отловите это значение из POST запроса и присвойте ее этому свойству (дальше расскажу, почему это работает) if($this->request->method('POST')){ ... $this->settings->company_phone = $this->request->post('company_phone'); Все будет работать Как работают настройки в Симпле Есть класс Settings, у него есть магические методы При обращении к любому его свйоству сначала проверяются значения из конфига, если не найдено -- идет запрос в БД в таблицу s_setting Пример: Мы обращаемся к свойству $this->settings->company_phonecompany_phone ищется в файле /config/config.php, такого там нет, далее идет запрос в БД и ищется там, а там опля -- есть такая строка и соответственно берется значение) Соответственно не нужно ничего программировать, нужно просто в эту таблицу добавить строку и получать/писать ее Но ваш способ тоже пригоден (не в сматривался в детали, имею в виду через плагины)Например для вывода баннеров или вывода своего меню или еще какого-то общего функционала Edited July 16, 2018 by Maksclub Quote Link to post Share on other sites
Chudo Posted July 16, 2018 Author Report Share Posted July 16, 2018 (edited) Не городить этот огород (а старый удалить) и просто создать поле в БДСоздать в шаблоне /simpla/design/html/setings.tpl инпут или textarea с уникальным name, например Да, Maksclub. Данный способ мне известен. И более того, я сам его использую. Но, я задался идеей написать модуль, что бы можно было создавать пользовательские переменные «по клику» Edited July 16, 2018 by Chudo Quote Link to post Share on other sites
Chudo Posted July 16, 2018 Author Report Share Posted July 16, 2018 (edited) Думал написать небольшой обработчик, который будет создавать эти переменные из меню настроек.Что-то вроде раздела «Валюта»Писать их в /simpla/SettingAdmin.php и в /simpla/design/html/settings.tpl Но, не хочется загромождать раздел настроек =) Edited July 16, 2018 by Chudo Quote Link to post Share on other sites
Chudo Posted July 16, 2018 Author Report Share Posted July 16, 2018 (edited) Не городить этот огород (а старый удалить) и просто создать поле в БДСоздать в шаблоне /simpla/design/html/setings.tpl инпут или textarea с уникальным name, например По большому счёту, решение рабочее. Но не могу понять как вывести переменную вида {$myvariables->name_myvariable} без {get_myvariables var=myvariable} {if $myvariable} {foreach $myvariable as $m} {if $m->image} {if $m->description} {$m->description} {/if} {/if} {/foreach} {/if} Edited July 16, 2018 by Chudo Quote Link to post Share on other sites
shooroop Posted July 16, 2018 Report Share Posted July 16, 2018 (edited) chocolate_moles делал слайдер можете взять его примерhttp://forum.simplacms.ru/topic/5698-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-%D1%81%D0%BB%D0%B0%D0%B9%D0%B4%D0%B5%D1%80/ Edited July 16, 2018 by shooroop Quote Link to post Share on other sites
Chudo Posted July 16, 2018 Author Report Share Posted July 16, 2018 chocolate_moles делал слайдер можете взять его примерhttp://forum.simplacms.ru/topic/5698-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-%D1%81%D0%BB%D0%B0%D0%B9%D0%B4%D0%B5%D1%80/ К сожалению, прочитав все 9 страниц, я не увидел решения, которое мне было бы под силу в реализации. Quote Link to post Share on other sites
shooroop Posted July 16, 2018 Report Share Posted July 16, 2018 К сожалению, прочитав все 9 страниц, я не увидел решения, которое мне было бы под силу в реализации. А зачем читатть 9 страниц? в первом посте архив в нем описание Quote Link to post Share on other sites
Chudo Posted July 16, 2018 Author Report Share Posted July 16, 2018 А зачем читатть 9 страниц? в первом посте архив в нем описание В архиве от chocolate_moles тоже нет вариантов решения моей задачи. Может и есть, но я его не понимаю Quote Link to post Share on other sites
shooroop Posted July 16, 2018 Report Share Posted July 16, 2018 В архиве от chocolate_moles тоже нет вариантов решения моей задачи. Может и есть, но я его не понимаю Ну бывает Визуально покажите что вы хотите сделать в адм части Quote Link to post Share on other sites
Chudo Posted July 16, 2018 Author Report Share Posted July 16, 2018 (edited) Ну бывает Визуально покажите что вы хотите сделать в адм части В админ части уже всё готово. Могу вывести конкретный id функцией {get_myvariables var=myvariable}{foreach $myvariable as $m}{if $m->id == 2}{$m->description}{/if}{/foreach} Хочу добиться её сокращения и привести её в вид {if $myvariable->id == 2} Edited July 16, 2018 by Chudo Quote Link to post Share on other sites
shooroop Posted July 16, 2018 Report Share Posted July 16, 2018 В админ части уже всё готово. Могу вывести конкретный id функцией {get_myvariables var=myvariable}{foreach $myvariable as $m}{if $m->id == 2}{$m->description}{/if}{/foreach} Хочу добиться её сокращения и привести её в вид {if $myvariable->id == 2} короче уже не будет. {get_myvariables var=myvariable} {foreach $myvariable as $m} //циклом перебираете все из таблицы {if $m->id == 2} // ограничиваете вывод только второй стоки из таблицы {$m->description} // выводите значение из второй строки {/if} {/foreach} Quote Link to post Share on other sites
Chudo Posted July 16, 2018 Author Report Share Posted July 16, 2018 короче уже не будет. {get_myvariables var=myvariable} {foreach $myvariable as $m} //циклом перебираете все из таблицы {if $m->id == 2} // ограничиваете вывод только второй стоки из таблицы {$m->description} // выводите значение из второй строки {/if} {/foreach} То есть, от цикла не избавиться? Quote Link to post Share on other sites
Chudo Posted July 16, 2018 Author Report Share Posted July 16, 2018 короче уже не будет. {get_myvariables var=myvariable} {foreach $myvariable as $m} //циклом перебираете все из таблицы {if $m->id == 2} // ограничиваете вывод только второй стоки из таблицы {$m->description} // выводите значение из второй строки {/if} {/foreach} Самое короткое, что у меня получилось, это... {get_myvariables var=myvariable} {foreach $myvariable as $m} {if $m->id == 2} {$m->name} {/if} {/foreach} Quote Link to post Share on other sites
shooroop Posted July 16, 2018 Report Share Posted July 16, 2018 (edited) То есть, от цикла не избавиться? от цикла нет. вы можете по другому ограничить вывод {assign var='group' value='2'} {get_banners group=$group} {foreach $banners as $banner} {$banner->url} {/foreach} http://forum.simplacms.ru/topic/7140-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-%D1%81%D0%BB%D0%B0%D0%B9%D0%B4%D0%B5%D1%80-%D0%B1%D0%B0%D0%BD%D0%BD%D0%B5%D1%80%D0%BE%D0%B2-%D0%B4%D0%BB%D1%8F-simpla-%D0%BE%D1%82-cernos/ Edited July 16, 2018 by shooroop Quote Link to post Share on other sites
Chudo Posted July 16, 2018 Author Report Share Posted July 16, 2018 от цикла нет. вы можете по другому ограничить вывод {assign var='group' value='2'} {get_banners group=$group} {foreach $banners as $banner} {$banner->url} {/foreach} http://forum.simplacms.ru/topic/7140-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-%D1%81%D0%BB%D0%B0%D0%B9%D0%B4%D0%B5%D1%80-%D0%B1%D0%B0%D0%BD%D0%BD%D0%B5%D1%80%D0%BE%D0%B2-%D0%B4%D0%BB%D1%8F-simpla-%D0%BE%D1%82-cernos/Тоже длинный получается. Спасибо тебе shooroop за то, что не остался в стороне) Но я всё таки буду пытаться написать так, что бы можно было дёргать принудительно по id конкретный блок Quote Link to post Share on other sites
ABSORBER Posted July 18, 2018 Report Share Posted July 18, 2018 В БД, в таблице __settings добавить поле siteinfo с типом text, в нем хранить json данные в админке сделать отдельный блок c:input text name=siteinfo[name][]input text name=siteinfo[value][] на js дописать что бы можно было дублировать блоки.результат что-то такое:https://s.mail.ru/C5fn/heeJV5yKg разумеется прежде чем писать в БД, мы это дело приводим в нужный видв SettingsAdmin.php в post: // Информация о сайте $siteinfo = array(); foreach($this->request->post('siteinfo') as $n => $si) { foreach($si as $i => $s) { if(empty($siteinfo[$i]) AND !empty($s)) $siteinfo[$i] = new stdClass; if(!empty($s)) { if($n == 'name') $s = str_replace('-', '', $this->translit($s)); $siteinfo[$i]->$n = $s; } } } $this->settings->siteinfo = json_encode($siteinfo); На выходе будет json в таком виде: { "1": { "name": "job_time", "value": "ПН-ВС, с 08:00 до 21:00" }, "2": { "name": "main_phone", "value": "123123123" } } т.к. по умолчанию в cms есть запрос к настройкам сайта, то не надо будет городить отдельный запрос.в api/Settings.php делаем проверку типа: // Выбираем из базы настройки $this->db->query('SELECT name, value FROM __settings'); // и записываем их в переменную foreach($this->db->results() as $result) { if(!($this->vars[$result->name] = @unserialize($result->value))) { // Делаем доступными параметры $settings->siteinfo.NAME_PARAMETER if ($result->name == 'siteinfo') { $siteinfo_value = []; foreach (json_decode($result->value) as $siteinfo) { $siteinfo_value[$siteinfo->name] = $siteinfo->value; } $result->value = $siteinfo_value; } $this->vars[$result->name] = $result->value; } } на сайте выводим:{$settings->siteinfo.job_time}{$settings->siteinfo.main_phone} Quote Link to post Share on other sites
yr4ik Posted July 18, 2018 Report Share Posted July 18, 2018 (edited) а зачем все эти танцы с php?Там штатные функции сохраняют сериализованный массив. $this->settings->siteinfo = [тут только формируем нужный массив из post]; Как работают настройки в Симпле Есть класс Settings, у него есть магические методы При обращении к любому его свйоству сначала проверяются значения из конфига, если не найдено -- идет запрос в БД в таблицу s_setting Пример: Мы обращаемся к свойству $this->settings->company_phonecompany_phone ищется в файле /config/config.php, такого там нет, далее идет запрос в БД и ищется там, а там опля -- есть такая строка и соответственно берется значение) увы, но этот класс Settings вообще не так работает.С config он никак не связан и ничего там не проверяет. При вызове конструктора он делает разовый запрос к БД и сохраняет все полученные данные в локальную переменную. После при обращении через маг. методы он берет значение по ключу уже из локального массива. А поиск по ключу запросом к БД - делается лишь только при записи значения через __set Edited July 18, 2018 by yr4ik Quote Link to post Share on other sites
Maksclub Posted July 18, 2018 Report Share Posted July 18, 2018 (edited) увы, но этот класс Settings вообще не так работает.С config он никак не связан и ничего там не проверяет. При вызове конструктора он делает разовый запрос к БД и сохраняет все полученные данные в локальную переменную. После при обращении через маг. методы он берет значение по ключу уже из локального массива. А поиск по ключу запросом к БД - делается лишь только при записи значения через __set а ну по памяти писал, сплоховала значит, прошу прощения Edited July 18, 2018 by Maksclub Quote Link to post Share on other sites
phukortsin Posted July 18, 2018 Report Share Posted July 18, 2018 По-моему, все можно реализовать куда проще, примерно так: public function get_myvariables_plugin($params, &$smarty) { if(!empty($params['var'])){ $mvs=array(); foreach($this->myvariables->get_myvariables($params) as $mv) $mvs[$mv->id]=$mv; $smarty->assign($params['var'], $mvs); } } Quote Link to post Share on other sites
Chudo Posted July 18, 2018 Author Report Share Posted July 18, 2018 (edited) Решил написать этот модуль вообще по другому.Как и обещал, готовое решение -->http://forum.simplacms.ru/topic/13639-создание-новых-произвольных-переменных-для-их/ Edited July 18, 2018 by Chudo Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.