Clientconfig в собственном сниппете MODX

Расширяем класс ClientConfig

ClientConfig - удобный интерфейс для редактирования собственных параметров сайта. Дает широкие возможности, вы в качестве администратора можете настроить различные опции, доступные для конечного пользователя. 

Возможные области применения:

  • редактирование контактных данных
  • редактирование контактной и любой другой информации на сайте
  • задание стилей оформления
  • и многое другое

Значения заданные в ClientConfig доступны на странице в плейсходере

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

<?php
//загружаем код класса clientconfig
require_once 'clientconfig.class.php';
class MyClientConfig extends ClientConfig {
    // Тут мы инициализируем родительский класс
    function __construct(modX &$modx,array $config = array()) {
    	return parent::__construct($modx, $config);
    }
    
    //свой класc
    public function getSettingsMy($groupkey) {
        
        
        /* Attempt to get from cache */
        $cacheOptions = array(xPDO::OPT_CACHE_KEY => 'system_settings');
        $settings = $this->modx->getCacheManager()->get('myclientconfig', $cacheOptions);
        if (empty($settings) && $this->modx->getCount('cgSetting') > 0) {
            $collection = $this->modx->getCollection('cgSetting');
            $settings = array();
            /* @var cgSetting $setting */
            foreach ($collection as $setting) {
                if ($setting->get('group') == $groupkey) {
                    
                    $settings[$setting->get('key')] = $setting->get('value');
                    
                }
                
            }
            /* Write to cache again */
            $this->modx->cacheManager->set('myclientconfig', $settings, 0, $cacheOptions);
        }
        return (is_array($settings)) ? $settings : array();
    }
    
}

Теперь в своем сниппете можно получить значения ClientConfig с фильтрацией по группе.

Пример использования, создадим сниппет getmyconf

<?php
if (empty($groupkey)){return;}// id группы
/*
например нам нужно набить селект значениями заданными в админке
<select>
	<option>0,9</option>
	<option>0,7</option>
	<option>0,6</option>
</select>
*/
$output = array();

$path = $modx->getOption('clientconfig.core_path', null, $modx->getOption('core_path') . 'components/clientconfig/');
        $path .= 'model/clientconfig/';
        $clientConfig = $modx->getService('myclientconfig','MyClientConfig', $path);

       if ($clientConfig instanceof MyClientConfig) {
            //$settings = $clientConfig->getSettings();
              $settings = $clientConfig->getSettingsMy($groupkey);
              
              $output[] = '<select>';
              
            foreach ($settings as $key => $value) {
                
              $output[]= '<option>'.$value.'</option>';
                
            }
              
              $output[] = '</select>';
            
        }

return implode("\n", $output);

Комментарии