Было бы чудесно если бы вы написали небольшой отзыв сюда, желательно с пожеланиями для улучшения. ;)
Есть возможность копирования и сортировки. Можно «перетащить» страницы в другую категорию.
Второй вариант: скопировать полностью категорию с потомками в другое место, переименовать, старую категорию удалить. Но во втором варианте можно столкнуться с проблемами.
Третий вариант: реализовать плагин, который будет менять страницу-родителя для группы страниц. :)
Четвертый вариант — зайти в phpMyAdmin, в таблицу pages, сделать SQL-запрос:
UPDATE page SET parent_id = X WHERE parent_id = Y
где X — ID страницы, к которой собираетесь цеплять потомков, Y — ID страницы у которой эти страницы-потомки находятся.
1. Да, для разных страниц можно использовать разные шаблоны. Можно наследовать шаблоны от «страниц-родителей»
2. Да, есть. Если установить будущую дату — страница получит статус «Ожидает»
3. Можно, статус «Скрыта» или «Черновик»
Шаблон представляет из себя HTML + простые PHP-вставки.
Примеры:
Получить все необходимые данные о странице:
<?php echo $this->title(); /* Получить заголовок страницы */ ?><?php echo $this->breadcrumbs(); /* Получить HTML хлебных крошек к странице */ ?><?php echo $this->slug(); /* Получить эквивалент заголовка в стрке браузера страницы */ ?><?php echo $this->keywords(); /* Получить ключевые слова страницы */ ?><?php echo $this->description(); /* Получить описание страницы */ ?><?php echo $this->url(); /* Получить полный URL к данной странице */ ?><?php echo $this->level(); /* Получить текущий уровень вложенности */ ?><?php echo $this->tags(); /* Получить тэги страницы */ ?><?php echo $this->content([[$part_name]], [[$inherit]]); /* HTML-контент страницы, в параметрах можно указать какую часть страницы взять, можно взять часть у страницы-родителя, если у страницы нет такой части */ ?><?php echo $this->hasContent([$part_name]); /* Проверить наличие контента конкретной части страницы */ ?><?php echo $this->date([$format], [$which_one]); /* Дата публикации страницы, в параметрах можно укзать формат */ ?><?php echo $this->link(); /* Тэг <A> — ссылка на данную страницу */ ?><?php echo $this->parent([$level])->title(); /* Получить заголовок страницы-родителя */ ?><?php echo $this->next()-title(); /* Получить заголовок следующей страницы в данном разделе */ ?><?php echo $this->previous()->title(); /* Получить заголовок пред идущей страницы в данном разделе */ ?><?php echo $this->children(); /* Получить всех потомков страницы */ ?><?php echo $this->find($uri); /* найти страницу по URI */ ?>
Есть так же константы, которые можно использовать в шаблоне:
<?php echo PUBLIC_URL; /* путь к директории public (хранятся файлы для контента) */ ?><?php echo CURRENT_URI; /* URI текущей страницы */ ?>
Например, чтобы построить простое меню для текущей страницы (вывести всех страниц-потомков), используем такой код:
<ul id="menu"> <?php foreach ($this->children() as $page): ?> <li><?php echo $page->link(); ?></li> <?php endforeach; ?></ul>
Чтобы вывести всех потомков главной:
<ul id="menu"> <?php foreach ($this->parent(0)->children() as $page): ?> <li><?php echo $page->link(); ?></li> <?php endforeach; ?></ul>
Параметр у метода parent - это level (уровень с которого нужно взять страницу-родителя). Можно конечно использовать $this->find('/')->children(), но это менее эффективный способ.
Можно использовать упрощенную запись для вывода информации о странице, пример:
<?=$this->title();?>
Что не намного сложней всех распространенных шаблонизаторов.
Попробуйте еще раз, обновите страницу — только что проверил — скачивание работает.
Иллюстрировать преимущества ООП лучше всего на примерах.
Например задача: получить информацию о всех файлах в директории, и узнать их дату модификации.
Как это делалось бы в функциональном программировании:
$dir_path = dirname(__FILE__);$dir_handler = diropen();while ($item = readdir($dir_handler)){ if ($item == '.' || $item == '..') continue; if (is_file($dir_path . DIRECTORY_SEPARATOR . $item)) { echo $item . ' дата модификации: ' . filemtime($dir_path . DIRECTORY_SEPARATOR . $item) . '<br />'; }}
Вполне злободневная задачка. Как это можно решить с помощью ООП, используя DirectoryIterator?
$dir_files = new DirectoryIterator(dirname(__FILE__));while ($dir_files as $file){ if ($file->isDot() || $file->isDir()) continue; echo $file->getFilename() . ' дата модификации: ' . $file->getMTime();}
Наверное вторая запись выглядит понятнее?
И в тему о фреймверках. Разбирал CI, работал с Коханой, тыкался в Zend Framework. Для новичка очень трудно понять обилие классов, и то какой класс важнее, какой нужно использовать и так далее. То есть к разбору кода довольно сложных фреймверков, которых вы насоветовали, лучше приступать с прочтения книжки или документации, или хотя бы c основ работы с ними. Да и вообще не с фреймверков начинать нужно.
Я начал и до сих пор использую примитивный MVC фреймверк, в котором кроме классов Dispatcher, Controller, Record и View больше ничего нет. И новичку, в принципе, для старта больше ничего и не нужно.
SQL-запрос в студию!
Ок, RewriteRule тогда, как вариант?
У первого макета нет выразительной шапки. Это плохо. Размеры шрифтов не те. Особенно в колонках "Новые рецепты", "Новости". Под строкой поиска шрифт на 2 пунткта меньше. Стрелочки в слайдерах (снизу) прибиты к боковым линиям, нехорошо. Навигация вообще не выразительная и сливается воедино со всем вокруг. Будет сложно найти меню, ориентироваться в сайте.
У второго макета нет такой острой болезни отсутствия меню, но на портал не тянет. Те же ошибки: одинакового размера шрифт, как в контентной части, так и в дополнительной (сайдбаре), так же и в футере. У кнопки "Поиск" появился новый цвет, который нигде больше не задействован. Ошибка. Правая сторона сильно оторвана от центрального блока. Мужик рисует какую то ересь... Честно.
Третий не удалось разглядеть. Какая то картинка маленькая. Но вижу ошибки в неравномерных отступах у блоков.
Что вас смущает в 301 редиректе? Можно ведь в .htaccess забить правила для редиректа и все. Если, например в системе будет логика URI следующая, например, /page/subpage, и если, допустим будет модуль, который выдает ту же страницу (без редиректа), например по /archive/2011/01/01/subpage (URI, который вы искусственно добавили), то будет дубль страницы, что нехорошо для поисковика. Если будет обычный 301 с /archive/2011/01/01/subpage на /page/subpage ничего страшного, думаю, не будет.
Спасибо за ответ. Вселяет надежды. ;)
@Mad_Man, да, как раз 6-ая версия. SP1 пак (кажется) решает проблему с gzip. Но все же нужно быть уверенным, что и в старых осликах будет работать.