> 1.
Я подозреваю, что новости у вас выводятся подобным сниппетом (код сниппета заведомо не верный):
<?php foreach ($this->find('news')->children() as $page): ?> <?php echo $this->date(); ?> <?php endforeach; ?>
В данном случае выводится дата страницы на которой располагается сниппет <?php echo $this->date(); ?>, вам же необходимо выводить дату новости, то есть павильно писать <?php echo $page->date(); ?>.
Правильный код сниппета:
<?php foreach ($this->find('news')->children() as $page): ?> <?php echo $page->date(); ?> <?php endforeach; ?>
> 2.
Да, это недостаток сниппета. Чуть позже приведу более универсальный пример.
Запустил сайт http://flexo.up.dn.ua/ где расположена документация, расширения. По мере возможностей будет пополнятся новыми разделами.
Если есть вопросы или пожелания, письма направляйте на flexo@up.dn.ua
Пока нет специального плагина для поиска по сайту. Можно использовать пользовательский поиск Google.
Наработки по плагину поиска еще остались от Frog CMS, поэтому старый плагин будет адаптирован под Flexo. Поэтому советую набраться терпения. ;)
Если поиск необходим просто здесь и сейчас, то можно воспользоваться сниппетом, который называю, «ленивый поиск», код сниппета:
<?phpif (!function_exists('snippet_sitesearch')){ function snippet_sitesearch($page, $query) { $out = ''; $childs = $page->children(); if (count($childs) > 0) { foreach ($childs as $child) { if (stristr($child->title(), $query)) { $out .= '<li><strong>' . $child->link($child->breadcrumb) . '</strong></li>'; } $out .= snippet_sitesearch($child, $query); } } $out = str_replace('<li><li>', '<li>', $out); $out = str_replace('</li></li>', '</li>', $out); return $out; }}$query = (isset($_POST['query']) ? $_POST['query']: null);$results = ($query !== null ? snippet_sitesearch($this->parent(0), $query): false);?><form id="searchForm" method="post"> <p id="searchQuery"><input id="searchQueryField" type="text" name="query" value="<?php if ($query !== null) echo($query); ?>" /></p> <p id="searchSubmit"><input id="searchSubmitButton" type="submit" value="Найти" /></p></form><?php if ($results !== false): ?><div id="searchResults"> <p>Результаты поиска для: «<strong><?php echo $query; ?></strong>»:</p> <?php if ($results != null): ?> <ol> <?php echo $results; ?> </ol> <?php else: ?> <p>Совпадений не обнаружено.</p> <?php endif; ?></div><?php endif; ?>
Как использовать этот сниппет:
Примечание: На странице поиска перед вставкой кода для пункта (2) необходимо сначала выключить WYSIWYG-редактор Tinymce (шестеренка напротив части body).
Недостатки этого сниппета:
Код для оформления формы поиска с других страниц сайта:
Если страница «Поиск» имеет slug «search», то нам необходим следующий код:
<form id="searchForm" method="post" action="<?php echo get_url('search'); ?>"> <p id="searchQuery"><input id="searchQueryField" type="text" name="query" /></p> <p id="searchSubmit"><input id="searchSubmitButton" type="submit" value="Найти" /></p></form>
Можно сделать проверку через JavaScript:
<script language="text/javascrip">if (location.host != 'www.site.com'){ location.replace('http://google.com/');}</script>
Либо положить в корень сайта .htaccess с параметрами для определенного файла:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://mysite.com/.*$ [NC] RewriteRule ^file.php$ http://google.com/search?q=$0 [L]</IfModule>
Последний код не проверял.
UPD. Пардон, немножко извиняюсь первый код нужно сделать проверку родительского окна, а не location.host фрейма. Пишем так:
<script language="text/javascrip">if (window.parent != undefined && window.parent.location.host != 'www.site.com'){ window.parent.location.replace('http://google.com/'); /*здесь можно схитрить и подставить главную своего сайта*/}</script>
То есть если люди будут устанавливать ваш HTML файл в IFRAME на своем сайте — посетителей будет перенаправлять на ваш. ;)
Предположение лишь. Не судите строго.
Предположил, когда гугл убил все сайты из индекса на .CO.UK (на этой площадке было слишком много дорвеев и фейков). Если поразмыслить логически, то должен существовать механизм траста к определенным площадкам, исходя из размещенного на них контента.
Насколько мне известно, гугл смотрит историю изменения IP адресов сайта, поэтому различным площадкам он может присваивать свой траст что ли. Поэтому если вы разместите сайт на площадке, где траст к ней меньше, чем на той что было — это может как то спровоцировать гугл. Я бы лучше посоветовал использовать тот же хостинг на котором располагались старые сайты, либо использовать нормальный хостинг, где мало «черных» и «серых» сайтов на одном IP.
Я думаю, что если просто спарсить контент 1 в 1 с точно такой же не тронутой разметкой, то гугл даже не заподозрит подмены, если конечно IP останутся теми же.
Телепорт кажется как то коверкает HTML-структуру (я не уверен на 100%), что нехорошо.
Для вывода новостей можно реализовать небольшой сниппет, назвать его, например, news_block.
Код сниппета news_block:
<?php$page = (isset($page) && is_object($page) ? $page: $this);$limit = isset($limit) ? $limit: null;?><ul class="news"> <?php foreach ($page->children(array('where' => 'page.published_on <= NOW()', 'limit' => $limit)) as $child): ?> <li> <h3><?php echo $child->link(); ?></h3> <div class="news-content"> <?php echo $child->content('short'); ?> </div> </li> <?php endforeach; ?></ul>
UPD. Немножко подправил сниппет — исправил параметры. По умолчанию, если не указан параметр limit, будут выводиться все новости; и если не указан параметр page — будет считаться, что текущая страница на которой вставлен сниппет и есть раздел «Новости».
Теперь о том, как должна быть организована структура страниц для вывода новостей.
Допустим, у вас есть раздел с названием «Новости», и полем slug «новости» соответственно (Flexo CMS по умолчанию поддерживает кириллические адреса), конечно вы можете использовать slug «news».
Допустим, у каждой страницы из раздела «Новости» есть части: body и short.
Допустим, в корневой странице имеется часть sidebar, которая используется в шаблоне и отображает сайдбар, подключается <?php echo $this->content('sidebar', true); ?>
Открываем корневую страницу, добавляем следующий код в часть sidebar:
<h2>Последние новости</h2><?php $this->includeSnippet('news_block', array('page' => $this->find('новости'), 'limit' => 3)); ?>
UPD. Небольшое замечание по поводу вставки данного кода в часть sidebar. Необходимо сначала отключить визуальный редактор у части sidebar. «Шестеренка» напротив sidebar → Фильтр → Установить «– отсутствует–».
Еще стоит обратить внимание на параметр $this->find('новости'). Если вы при создании раздела «Новости» используете уникальный slug, например, «news», то необходимо заменить 'новости' на 'news' → $this->find('news').
Все, теперь, если все сделано правильно, на страницах должны появиться новости.
Сниппет должен сгенерировать следующий код:
<ul class="news"> <li> <h3><a href="...">New article with pending 2</a></h3> <div class="news-content"> <p>Pending article short description 2.</p> </div> </li> <li> <h3><a href="...">New article with pending 1</a></h3> <div class="news-content"> <p>Pending article short description 1.</p> </div> </li> <li> <h3><a href="...">GoogleServe 2011: Giving back around the world</a></h3> <div class="news-content"> <p>Over the last month, more than 7,700 Googlers helped serve their communities across 400 different projects as part of GoogleServe, an employee-driven initiative organized almost entirely by volunteers. Through partnerships with nonprofits, schools and local governments, Googlers from 119 cities in 36 countries helped communities in need with projects ranging from educating youth about online bullying to cleaning up local rivers and parks. </p> </div> </li></ul>
Параметры сниппета news_block:
Теперь приятная новость. Сниппет не будет выводить те новости, у которых статус «Ожидает». Это видно из параметров выборки страниц-потомков:
$page->children(array('where' => 'page.published_on <= NOW()', 'limit' => $limit))
Кстати, достаточно удобно использовать при выборке потомков небольшие SQL вставки в параметрах. Зная структуру таблицы page, можно манипулировать выводом данных из этой таблицы.
Можно немножко расширить сниппет и использовать плагин Page images для вывода новостей с изображениями. Если необходима такая функциональность — опишу подробней.
UPD. По поводу «катстомных» адресов для страниц — в ближайшее время сделаю плагин. В пределах недели.
Вы не поверите, но отвечать на вопросы по системе доставляет мне удовольствие, поэтому не стесняйтесь — спрашивайте.
«Добавить поле» (включен плагин Page fields) — плагин фактически дублирующий функциональность частей. Это факт. За исключением нескольких особенностей. 1. Поля более компактные 2. Поля могут содержать максимум 255 символов, поэтому работа с этими полями должна быть значительно быстрей, чем с полями типа TEXT, которыми являются части. UPD. Планируется в будущем добавить специальные типы полей: выпадающий список, чекбоксы…
Использовать поля можно таким образом:
<?php echo $this->fields->my_field; ?>
В такие «поля» можно загонять, например, цену продукта (если у вас каталог продукции), дополнительные SEO-поля, если не достаточно стандартных, ссылки, если у вас реализовано портфолио с работами, и т.д.…
Так же доступ к полям работает и при получении потомков, например:
<ul> <?php foreach ($this->children() as $page): ?> <li><a href="<?php echo $page->fields->site_url; ?>"><?php echo $page->title(); ?></a></li> <?php endforeach; ?></ul>
Можно совместить с плагином подключаемых изображений (включен плагин Page images):
<ul> <?php foreach ($this->children() as $page): ?> <?php $image = $page->images->findOne(); ?> <li><a href="<?php echo $page->fields->site_url; ?>"><img src="<?php echo (empty($image) ? PUBLIC_URL.'images/no-image.gif': $image->url()); ?>" alt="<?php echo $page->title(); ?>" /> <?php echo $page->title(); ?></a></li> <?php endforeach; ?></ul>
Последний пример выглядит несколько наворочено, но пока плагин подключаемых изображений работает так. :)
UPD. Забыл добавить по какому принципу формируется список полей, если добавляется новая страница. Все просто. Список полей берется из последней добавленной страницы, из раздела в который добавляется страница (старшая сестра — у которой наибольшая ID в данном разделе). По такому же принципу работают и части.