1 (2013-06-01 06:37:24 отредактировано newbie)

Тема: FAQ - Часто Задаваемые Вопросы

1. Основные определения:
Шаблон/Тема - html/php код, который задаёт общее оформление для разных типов страниц.
Для панели администратора, шаблоны находятся в папке:

/admin/themes/

Для сайта, шаблоны находятся в папке:

/public/themes/

--
Сниппеты - расширения, написанные на PHP, которые добавляют разные возможности на сайте, редактировать их могут только администраторы.
Вывести на страницу сниппет можно шорткодом так:

{snippets get="NameSnippets"}

В шаблоне:

<?php echo Snippet::get('NameSnippets'); ?>

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

{block get="test"}

В шаблоне:

<?php echo Block::get('test'); ?>

где test - название вашего блока.
--
Чанки - небольшие куски (X)HTML-кода, которые можно использовать для повторяющихся частей в шаблонах, а также для работы сниппетов.
В коде шаблона чанк можно вывести так:

<?php Chunk::get('header'); ?>

где header - название вашего чанка
--
Short Code (Короткий код) - представляет собой некое выражения, которые затем интерпретируются в машинный код системы, используется для легкого и быстрого вывода нужной части информации на страницах сайта.
--
Минификация - сжатие кода, удаление не ненужной конечному пользователю информации: отступы, пробелы, переходы строк, комментарии - всё то, что увеличивает вес страницы, а следовательно и время ее загрузки.

====================

2. Подключение файлов стилей (*.css):
В шаблонах системы: (*примеры)
Несколько CSS:

<?php Stylesheet::add('public/assets/css/bootstrap.css', 'frontend', 1); ?>
<?php Stylesheet::add('public/themes/default/css/default.css', 'frontend', 2); ?>
<?php Stylesheet::add('public/assets/css/bootstrap-responsive.css', 'frontend', 3); ?>
<?php Stylesheet::load(); ?>

Один CSS:

<?php Stylesheet::add('public/assets/css/bootstrap.css', 'frontend', 1); ?>
<?php Stylesheet::load(); ?>

--
В шаблонах панели администратора: (*примеры)
Несколько CSS:

<?php Stylesheet::add('public/assets/css/bootstrap.css', 'backend', 1); ?>
<?php Stylesheet::add('public/assets/css/bootstrap-responsive.css', 'backend', 2); ?>
<?php Stylesheet::add('admin/themes/default/css/default.css', 'backend', 3); ?>
<?php Stylesheet::load(); ?>

Один CSS:

<?php Stylesheet::add('public/assets/css/bootstrap.css', 'backend', 1); ?>
<?php Stylesheet::load(); ?>

--
В чём разница:
frontend - обозначение подключения для системы
backend - обозначение подключения для панели администратора
<?php Stylesheet::load(); ?> - собирает обший скоп и минифицирует в один общий файл.

====================

3. Подключение файлов JavaScript (*.js) :
Несколько JS (*примеры):

<script type="text/javascript" src="<?php echo Option::get('siteurl'); ?>../../../post/2559/public/assets/js/ru.forum_subdomain/jquery.js"></script>
<script type="text/javascript" src="<?php echo Option::get('siteurl'); ?>public/assets/js/bootstrap.js"></script>
<?php Javascript::load(); ?>

Один JS (*примеры):

<script type="text/javascript" src="<?php echo Option::get('siteurl'); ?>public/themes/default/js/jquery.js"></script>
<?php Javascript::load(); ?>

--
Альтернативный вариант (более правильный), правда минификация пока не реализована:
Несколько JS (*примеры подключения в панели администратора):

<?php Javascript::add('../../../post/2559/public/assets/js/ru.forum_subdomain/jquery.js', 'backend', 1); ?>
<?php Javascript::add('../../../post/2559/admin/themes/default/js/ru.forum_subdomain/menu.js', 'backend', 2); ?>
<?php Javascript::add('../../../post/2559/admin/themes/default/js/ru.forum_subdomain/jquery.cookie.js', 'backend', 2); ?>
<?php Javascript::load(); ?>

Один JS (*пример подключения в системе):

<?php Javascript::add('../../../post/2559/public/themes/default/js/ru.forum_subdomain/jquery-1.8.2.min.js', 'frontend', 4); ?>
<?php Javascript::load(); ?>

--
В чём разница:
frontend - обозначение подключения для системы
backend - обозначение подключения для панели администратора
<?php Javascript::load(); ?> - собирает обший скоп и минифицирует в один общий файл (минификация ещё не реализована).

====================

4. Точка в slug (home.html):
- Открыть файл:

/monstra/helpers/security.php

- Найти 159-162 строки:

            // Remove characters
            $str = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $str );
            $str = preg_replace("/[\/_|+ -]+/", $delimiter, $str );
            $str = trim($str, $delimiter); 

- Заменить на:

        // Remove characters
        $str = preg_replace("/[^a-zA-Z0-9.\/_|+ -]/", '', $str );
        $str = preg_replace("/[\/|+ -]+/", $delimiter, $str );
        $str = trim($str, $delimiter); 

- Открыть файл:

plugins/box/filesmanager/filesmanager.admin.php

- Найти:

move_uploaded_file($_FILES['file']['tmp_name'], $files_path.Security::safeName(basename($_FILES['file']['name'], File::ext($_FILES['file']['name'])), '-', true).'.'.File::ext($_FILES['file']['name']));

- Заменить на:

move_uploaded_file($_FILES['file']['tmp_name'], $files_path.Security::safeName(basename($_FILES['file']['name'], File::ext($_FILES['file']['name'])), '-', true).File::ext($_FILES['file']['name']));

====================

6. Включить monstra cms в режим отладки:
- Открыть файл:

/engine/_init.php 

- Найти:

Monstra::$environment = Monstra::PRODUCTION;

- Заменить на:

Monstra::$environment = Monstra::DEVELOPMENT;

====================

7. При входе в панель администратора высвечивается надпись "Plugin main admin function does not exist":
Решение: очистить cookie и кэш браузера.

====================

8. Могу ли я разрабатывать и продавать плагины за деньги:
Да, конечно можете, никаких ограничений на данный момент по этому поводу нет. Помните, что monstra cms работает под лицензией GNU GENERAL PUBLIC LICENSE Version 3:
http://monstra.org/about/license
а это значит, что любой пользователь, которому вы продадите плагин, может размещать его как и на форуме, так и на файлообменниках или других ресурсах, единственное требование, которое он должен будет выполнить - это указывать Вас, как разработчика и контактную информацию, например Ваш e-mail или сайт.

====================

9. Основные теги вывода информации в шаблоне:
http://monstra.org/documentation/theme-template-tags
Имя сайта:

<?php echo Site::name(); ?>

---
Название темы/шаблона:

<?php echo Site::theme(); ?>

---
Название сайта - title:

<?php echo Site::title(); ?>

---
Описание сайта - description:

<?php echo Site::description(); ?>

---
Ключевые слова- keywords:

<?php echo Site::keywords(); ?>

---
Слоган сайта:

<?php echo Site::slogan(); ?>

---
Контент сайта:

<?php echo Site::content(); ?>

Рекомендуется контент выводить так:

<div>
            <?php Action::run('theme_pre_content'); ?>
        </div>
        <div>
            <?php echo Site::content(); ?>
        </div>
        <div>
            <?php Action::run('theme_post_content'); ?>
        </div>

Эти хуки нужны для работы некоторых плагинов, используя их они могут выполнять какие-либо действия.
---
URL-адрес сайта:

<?php echo Site::url(); ?>

---
Копирайты:

<?php echo Site::powered(); ?>

====================

10. Как в шаблоне вывести меню сайта:

<?php echo Menu::get(); ?>

если вы обозвали меню например "category_name", то так:

<?php echo Menu::get('category_name'); ?>

====================

11. В шаблоне подключен bootstrap.css, что это такое?:
monstra cms имеет встроенный framework twitter bootstrap
http://twitter.github.com/bootstrap/
http://ru.wikipedia.org/wiki/Twitter_Bootstrap
Если вы планируете делать свой шаблон без него, то использовать данные файлы нет необходимости.

====================

12. В чём разница между "Редактором" и "Администратором":
Редакторы - пользователи, которые отвечают исключительно за контент и информацию на сайте.
Администраторы - пользователи, которые обладают всеми правами "редакторов", а так же могут изменять код и скрипты, в частности например сниппеты.

====================

13. Где можно взять графические элементы monstra cms:
http://monstra.org/about/logos-and-graphics
или тут
http://forum.monstra.org/ru/post/2318/#p2318

====================

14. Как подключить индивидуальный css:

<?php Stylesheet::add('public/assets/css/bootstrap.css', 'frontend', 1); ?>
<?php Stylesheet::add('public/themes/default/css/default.css', 'frontend', 2); ?>
<?php Stylesheet::load(); ?>
<link rel="stylesheet" href="<?php echo Site::url();?>public/themes/default/css/start.css" type="text/css" />

Получается схема: мини_файл_css + индивидуальный_css.
Рекомендация: Сообщество monstra cms всё же рекомендует использовать один css файл по схеме минификации.

====================

15. Как вывести контент одной страницы, на другой странице:
Открыть:

/plugins/box/pages/pages.plugin.php

Найти 29-30 строки:

        // Include Admin
        Plugin::Admin('pages', 'box');

Заменить на:

        // Include Admin
        Plugin::Admin('pages', 'box');
    }
    Shortcode::add('page', 'get_page_content');
    function get_page_content($attributes) {
    $page = Pages::$pages->select('[slug="'.$attributes['slug'].'"]', null);
    return Text::toHtml(File::getContent(STORAGE . DS . 'pages' . DS . $page['id'] . '.page.txt'));
    }

Вывести на странице другую страницу:

{page slug="home"}

В шаблоне:

<?php echo get_page_content(array('slug' => 'home')); ?>

home - это название slug
Не надо на странице home выводить страницу home:-)

====================

16. Вывод ссылок на дочерние страницы в родителе:

<?php echo Page::available(); ?>

или так:

$pages = Page::children('parent_page_name');
foreach($pages as $page) {
echo $page['title'];
}

Для настройки вывода списка редактируем следующий файл:

/plugins/box/pages/views/frontend/available_pages.view.php

====================
17. Доступ определенной части контента, только для зарегистрированных пользователей :
в index.template.php:

<?php if (Session::exists('user_role') && in_array(Session::get('user_role'), array('admin', 'editor', 'user'))) { ?>
ТО ЧТО СПРЯТАТЬ
<?php } ?>

====================

Поделиться

2 (2012-11-15 22:16:40 отредактировано AlxBuk)

Re: FAQ - Часто Задаваемые Вопросы

Файл конфигурации сайта. storage\database\options.table.xml

http://i.imgur.com/rQrD1.png

!!!   ---   Облегчи жизнь себе и другим ЧИТАЙ ПРАВИЛА   ---   !!!

░░░▒▒▒▓▓▓█   Monstra Demo Site ®  █▓▓▓▒▒▒░░░

Сайт AlxBuk

Поделиться

3

Re: FAQ - Часто Задаваемые Вопросы

Примерно такая же информация и у меня в ТХТ файле - как подсказка для себя.
Молодец newbie, что выложил тут.

У богатых людей - большая библиотека.
У бедных людей - большой телевизор.

Сайт Hmelex

Поделиться

4

Re: FAQ - Часто Задаваемые Вопросы

Дополните FAQ тем как вывести определенные блок или снипет на определенной странице.

Например вставив его в одном месте в шаблоне, блок выводится на заданной ему странице или нескольких страниц исключая к примеру главную и наоборот smile

Мне сейчас этот вопрос очень интересен, думаю и многим новичкам он тоже пригодится.

Поделиться

5

Re: FAQ - Часто Задаваемые Вопросы

STUFF пишет:

Дополните FAQ тем как вывести определенные блок или снипет на определенной странице.

Например вставив его в одном месте в шаблоне, блок выводится на заданной ему странице или нескольких страниц исключая к примеру главную и наоборот smile

Мне сейчас этот вопрос очень интересен, думаю и многим новичкам он тоже пригодится.

Внимательно прочитайте еще раз... Там всё написано... Шорткод - на определенной странице выводит. В Шаблоне - на страницах данного шаблона выводит.

Поделиться

6

Re: FAQ - Часто Задаваемые Вопросы

newbie нет, я имею ввиду так: шаблон состоит к примеру из только index.template.php

у меня страницы например так - главная, о компании, услуги

я хочу бок "тест" вывести в правой колонке сайдбара, только лишь на странице "о компании", как мене его для этого прописать в index.template.php?

или мне нужно создавать o_koppanii.template.php и туда вставлять блок "тест"? иначе ни как? Оо

Поделиться

7 (2012-11-24 10:20:09 отредактировано olsv64)

Re: FAQ - Часто Задаваемые Вопросы

в одной из CMS для компонентов (см. БЛОКОВ) есть такой код

<?php get_component((string) return_page_slug()); ?> компонент с именем ссылки страницы
или так
<?php
if ( return_page_slug() == 'about' ) {
    get_component('about-component');
} elseif ( return_page_slug() == 'index' ) {
    get_component('homepage-component');
} else {
    get_component('generic-component');
}
?>

я думаю человек это имеет ввиду, это позволяет не создавать массу шаблонов, а пользоваться одним

Сайт olsv64

Поделиться

8

Re: FAQ - Часто Задаваемые Вопросы

olsv64 помните как это было в TCMS? а этот вариант, сейчас попробую)

Поделиться

9

Re: FAQ - Часто Задаваемые Вопросы

Нечего не получается.. вот как это делалось в предшественнике монстры

<?php 
$params = getParams();
$page = '[b]нужная страница[/b]';
if (($params[0] == $page && $params[1] == '') || ($params[1] == $page)) {
    getBlock('[b]название блока[/b]');
}
?>

Можно ли что-то подобное использовать в Монстре?

Поделиться

10

Re: FAQ - Часто Задаваемые Вопросы

Делай не блоком а чанками.. они выводят что хочешь в любом месте страницы.....

Лучше сгореть, чем истлеть...

Сайт kromverk

Поделиться

11

Re: FAQ - Часто Задаваемые Вопросы

kromverk ок а как мне чанку приказать выводится на определенной страницу если допустим у меня только один шаблон  index.template.php?

Поделиться

12

Re: FAQ - Часто Задаваемые Вопросы

либо добавлять чанк в контент через - Страницы
либо создать index2.template.php и туда вставить чанки которые тебе нужны , но не забудь применить эту шаблон для страницы в которой ты хочешь его видеть

(c) RomanArt
Создание дизайнов любой сложности для Monstra cms

Поделиться

13

Re: FAQ - Часто Задаваемые Вопросы

RomanArt спасибо, но этот то вариант мне понятен smile

Поделиться

14

Re: FAQ - Часто Задаваемые Вопросы

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

Сайт olsv64

Поделиться

15 (2012-11-25 16:12:26 отредактировано sergeyterr)

Re: FAQ - Часто Задаваемые Вопросы

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

а так нельзя сделать?

<?php
$page = Site::title();
if $page == 'нужная страница';
.........
?>
Спасибо говорим плюсиком в репутацию. Так виднее smile

Поделиться

16 (2012-11-26 10:53:32 отредактировано AlxBuk)

Re: FAQ - Часто Задаваемые Вопросы

Добавьте в ФАК

Задача: N-колво страниц без родителей, сделать с одним конкретным родителем.
Решение:
В админке запаришься тыкать перемещать, намного проще открыть в NPP storage\database\pages.table.xml
И в нужных страницах заменить <parent/> на имя вашего родителя <parent>blog</parent>


Задача: Массово удалить ненужные пункты в главном меню

Решение:
Открыть в NPP storage\database\menu.table.xml привести к нормальному виду и править.

Для наглядности вот рисунки

ДО
http://i.imgur.com/mGIPq.png

ПОСЛЕ

http://i.imgur.com/60oiO.png

!!!   ---   Облегчи жизнь себе и другим ЧИТАЙ ПРАВИЛА   ---   !!!

░░░▒▒▒▓▓▓█   Monstra Demo Site ®  █▓▓▓▒▒▒░░░

Сайт AlxBuk

Поделиться

17 (2012-11-27 14:06:23 отредактировано sergeyterr)

Re: FAQ - Часто Задаваемые Вопросы

sergeyterr пишет:

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

а так нельзя сделать?

<?php
$page = Site::title();
if $page == 'нужная страница';
.........
?>

Я проверил - поставил у себя такой код в сниппете  - отлично работает:

<?
$page = Site::title();
if($page == 'Контакты') Chunk::get('niz2');
else Chunk::get('niz1');
?>

Не понятно только почему если сниппет это кусок пхп в нем нужно вставлять

<? cod ?>
Спасибо говорим плюсиком в репутацию. Так виднее smile

Поделиться

18

Re: FAQ - Часто Задаваемые Вопросы

Не понятно только почему если сниппет это кусок пхп в нем нужно вставлять

Это кусочек шаблона. В нем также как и в шаблоне можно писать хоть php, хоть js, хоть html

Follow me: Twitter | GitHub | Facebook | Вконтакте

Стань спонсором проекта!

Сайт Awilum

Поделиться

19

Re: FAQ - Часто Задаваемые Вопросы

При открытии файла устанвки пишет:
...Монстра говорит...
Требуется Apache Mod Rewrite

Без него никак?
Или как его(Apache Mod Rewrite) установить?

Поделиться

20

Re: FAQ - Часто Задаваемые Вопросы

Или как его(Apache Mod Rewrite) установить?

Follow me: Twitter | GitHub | Facebook | Вконтакте

Стань спонсором проекта!

Сайт Awilum

Поделиться

21

Re: FAQ - Часто Задаваемые Вопросы

FYI
--------------

Фронтенд вьюхи плагинов можно переопределить (использовать свои индивидуальные)
Для этого не редактируем вот это например вьюху https://github.com/Awilum/monstra-cms/b … x.view.php

а создаем точно такой же файл с вашим модифицированным кодом в вашей теме оформления сохраняя при этом такой же путь. То есть для переопределения вьюхи плагина "Sitemap", в теме создаем :  / plugins / box / sitemap / views / frontend / index.view.php

Follow me: Twitter | GitHub | Facebook | Вконтакте

Стань спонсором проекта!

Сайт Awilum

Поделиться

22

Re: FAQ - Часто Задаваемые Вопросы

А можно пример? Допустим дефолтный шаблон монстры с переделанной картой сайта ? Выложи пожалуйста=)

(c) RomanArt
Создание дизайнов любой сложности для Monstra cms

Поделиться

23

Re: FAQ - Часто Задаваемые Вопросы

Поделиться

24 (2013-03-13 19:24:29 отредактировано kick)

Re: FAQ - Часто Задаваемые Вопросы

Добавьте, пожалуйста в FAQ "Вы замечательно натянули шаблон, но у вас не отображается активный пункт меню"=)
...чет я фтупляю чё тут делать если честно.=) Хде находится сниппет в котором можно установить class текущему пункту меню, подскажите пожалуйста? Ну или хотябы скажите какой class здесь используется по умолчанию, а то мне уже исходный код посмотреть негде=)...такой же, как на сайте производителе, active?

Поделиться

25 (2013-03-13 19:32:30 отредактировано newbie)

Re: FAQ - Часто Задаваемые Вопросы

kick пишет:

Добавьте, пожалуйста в FAQ "Вы замечательно натянули шаблон, но у вас не отображается активный пункт меню"=)
...чет я фтупляю чё тут делать если честно.=) Хде находится сниппет в котором можно установить class текущему пункту меню, подскажите пожалуйста? Ну или хотябы скажите какой class здесь используется по умолчанию, а то мне уже исходный код посмотреть негде=)...такой же, как на сайте производителе, active?

Вы не на русском разговариваете.... Ничего не понятно... "class" прописываются в css. Причем тут шаблон? a:active должно находиться после a:hover в таблице стилей, иначе работать не будет - база html. Если у вас какое-то мудреное меню, то в шаблоне используйте чисто код вставки меню своего, а не меню monstra.

Поделиться