We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 25463
    • 61 Posts
    Добрый день !
    Подскажите пожалуйста, ни у кого нет плагина (или наработок) для того, чтобы пользователь в админке при ввобе нового раздела сайта не мог сам указывать его шаблон, а шаблон вычислялся и устанавливался автоматически в зависимости от шаблона родительского раздела.
    Например, если родительский шаблон - "список новостей", то при вводе дочерних разделов их шаблон автоматически и принудительно устанавливался бы как "Одна новость" и никак иначе. Или, например, все дочерние разделы от раздела c шаблоном "каталог товаров" при вводе имели бы уже установленный шаблон "информация об одном товаре".
    Прошу прощения, если подобный вопрос уже встречался.
    Заранее благодарен за ответ.
      • 19164
      • 1,215 Posts
      Есть в комплекте движка плагин - Inherit Parent Template, который при создании дочернего документа присваивает ему шаблон родителя. Посмотрите.
        DirectResize 0.9 beta. PHPThumb, sets of configurations, configuration, binded to specific path. No backward compatibility. | DirectResize 0.9. PHPThumb, наборы параметров, параметры, привязанные к определенным путям. Без обратной совместимости.

        Unfortunately, DirectResize project is closed. If you want to continue development, PM me for access to project page on Google Code. К сожалению, проект DirectResize закрыт. Если вы желаете продолжить разработки, обращайтесь через ПМ для получения доступа к репозиторию на Google Code.

        [PLUGIN] DirectResize - as Maxigallery but for single images :: Download :: [url=http://modxcms.com/forums/index.php/topic,21490]
        • 9675
        • 63 Posts
        Вот решение.
        Те документы, для потомков которых вы хотите задать шаблон по умолчанию (все ваши папки-контейнеры), должны иметь шаблон, содержащий дополнительный параметр childs_template — ID шаблона, который будут иметь дочерние документы.
        Inherit Parent Template должен выглядеть так.
        
        global $content;
        $e = &$modx->Event;
        
        switch($e->name) {
        	case 'OnDocFormPrerender':
        		if(($_REQUEST['pid'] > 0) && ($id == 0)) {
        		$result = $modx->getTemplateVars(array('childs_template'), "*", $_REQUEST['pid'], 1, "", "");
        			if ($result[0]['value'] != '') {
        				$content['template'] = $result[0]['value'];
        			}
        			else if ($parent = $modx->getPageInfo($_REQUEST['pid'],0,'template')) {
        				$content['template'] = $parent['template'];
        			}
        		}
        		break;
        	default:
        		return;
        		break;
        }

        Для большего удобства выбора шаблона добавте сниппет TemplateSelector:
        if(!function_exists("getAllTemplates")) {
        	function getAllTemplates() {
        		global $modx;
        		$out = "";
        		$sql = "SELECT id, templatename FROM " . $modx->getFullTableName('site_templates');
        		$result = $modx->db->query($sql);
        		while($t = $modx->db->getRow($result)) {
        			$out .= $t['templatename'] . "==" . $t['id'] . "||";
        		}
        		return $out;
        	}
        }
        return getAllTemplates();
        

        И как возможные значения для поля childs_template укажите следующую строку
        @EVAL return $modx->runSnippet("TemplateSelector");

        Это работает. Наслаждайтесь.
          • 27073
          • 16 Posts
          Quote from: filin at Oct 26, 2007, 03:09 AM
          Это работает. Наслаждайтесь.
          Однако нет.
          Вроде, всё сделал, как описано, но дочерние документы по-прежнему создаются с глобальным шаблоном по умолчанию.
            Shit happens.
            • 27073
            • 16 Posts
            Разобрался, в чём дело.
            В коде Inherit Parent Template, что привёл filin, «<?php » в первой строке (т.е. вся первая строка) и «?>» в последней — лишние. Удалил эти две мелочи, и всё заработало.
              Shit happens.
              • 27073
              • 16 Posts
              Однако возникла другая проблема: не загружаются дополнительные параметры (TV) нового дочернего документа. Под заголовком «Дополнительные параметры» вместо этих самых параметров появляется надпись:
              Fatal error: Cannot redeclare processtvcommand() (previously declared in Y:\home\имя сайта\www\manager\includes\tmplvars.commands.inc.php:17) in Y:\home\имя сайта\www\manager\includes\tmplvars.commands.inc.php on line 117
              Если вручную выбрать любой другой шаблон, а потом сразу назначить нужный, то доп. параметры загружаются без проблем.

              Если у дочернего документа нет дополнительных параметров, то там появляется штатная надпись «Доп. параметров не найдено».
                Shit happens.
                • 9675
                • 63 Posts
                Возможно дело в версии MODx. В сообщении выше все исправил. Просто вызвал другую функцию. Должно работать везде.
                  • 27073
                  • 16 Posts
                  Да, теперь всё работает. Спасибо.
                    Shit happens.