Поле «SEO-текст» для ICMS 2 - Обновление 1.8.0

+20
2.74K
Иллюстрация
Добавлена поддержка свойств, разбиение паттернов на логические блоки и другие новые возможности.


Что нового?

1. Поддержка значений родительской категории. Теперь при составлении паттернов есть возможность использовать такие параметры как ID и title родительской категории.

2. Возможность использовать конструкции вида if-else. Это дает возможность выводить те или иные блоки в зависимости от значения той или иной переменной. Поддерживается стандарный набор условий — ==, !=, <, >, >=, <=.

[if {category-id} == 5]Выводим текст 1[else]Выводим текст 2[/if]

3. Возможность перечисления выбранных значений мультисписков в нужном вам контексте. Например перечислить выбранные элементы списка в виде ссылок на страницы фильтрации. Конструкция вида

{listfield}<a href="/{ctype-name}?listfield={listfield-id}">{listfield-value}{/listfield}

создаст список ссылок для фильтра с указанными в записи значениями.

4. Разбиение паттерна на логические фразы, при помощи разделителя ||. Например, паттерн

{title}|| площадью {prop-8}|| на {prop-9} этаже|| жилой площадью {prop-16}

выведет только те логические "кубики", для которых присутствуют значения указанных свойств(со значениями полей поле работает аналогично). В зависимости от заполненности тех или иных полей(свойств) записи получим разный результат:
— Продам квартиру в новостройке площадью 120 м2 на 5 этаже жилой площадью 100 м2
— Продам квартиру в новостройке на 5 этаже жилой площадью 100 м2;
— Продам квартиру в новостройке площадью 120 м2 жилой площадью 100 м2
— Продам квартиру в новостройке жилой площадью 100 м2
и т.д.

Это позволяет использовать единый паттерн для полей, которые существуют только в определенных категориях, необязательны к заполнению и т.д. А также при использовании свойств, которые как мы знаем изначально привязаны к определенным категориям, и в разных категориях мы имеем разный набор свойств.

5. Поддержка свойств типа контента. Теперь при составлении паттернов можно использовать не только поля записи, но и свойства


Поддерживаемые значения:

Типы контента: {ctype-id} — id текущего типа контента, {ctype-name} — имя текущего типа контента, {ctype-title} — название типа контента, {ctype-description} — описание типа контента, {ctype-labels-one}, {ctype-labels-two}, {ctype-labels-many}, {ctype-labels-create} — названия записей со склонениями(например новость, новости, новостей, новость). Также есть возможность обращаться к другим типам контента по имени и спользовать аналогичные параметры, например {ctypebyname-articles-title}, {ctypebyname-news-description} и т.д.

Категории: {category} — название категории; {category-id} — id, {category-slug} — slug, {category_url} — url.

Дочерние категории: {subcat-1} — название категории; {subcat-1-id} — id, {subcat-1-slug} — slug.

Родительская категория: {parentcat-title} — заголовок родительской категории, {parentcat-id} — id родительской категории.

Текстовые поля: {fieldname} — текст поля.

Значения из записи: {item-id} — id записи, {item-slug} — slug записи, {item-datepub} — дата публикации.

Свойства: {prop-ID свойства} выведет значение данного свойства. Например: {prop-6}, {prop-17}

Связанные списки: {fieldname-id-номер} — id списка, {fieldname-номер} — значение списка. Номер это уровень вложенности списка.

Списки: {fieldname-id} — текст по номеру, {fieldname-current} — текст текущего элемента, {fieldname_id} — id текущего элемента.

Города: {fieldname} — название, {fieldname_id} — id города.

InstantMaps: {places-city} — Название города, {places-city-id} — id города, {places-country} — страна, {places-region} — регион, {places-street} — улица, {places-house} — дом, {places-room} — квартира, {places-lat} — широта, {places-lng} — долгота, {places-phone} — телефон, {places-site} — сайт, {places-skype} — скайп, {places-email} — e-mail адрес

Автор публикации: {author-nickname} — никнейм автора публикации, {author-email} — e-mail автора публикации, {author-city} — город автора публикации, {author-city-id} — id города автора публикации, {author-url} — ссылка на профиль автора, {author-avatar} — ссылка на аватар автора, {author-avatar-src} — аватар автора, {author-поле} — значение из профиля пользователя, например {author-hobby} — текст из поля "О себе", {author-spr} — количество записей в типе контента spr, {author-spr-url} — ссылка на записи автора в типе контента spr, {author-comments} — количество комментариев автора, {author-comments-url} — ссылка на комментарии автора, {author-friends-10} — список друзей автора с аватарками (10 — количество, сколько выводить), {author-friend-add} — добавить автора в друзья, {author-friendslink} — все друзья автора(ссылка), {author-message} — написать автору личное сообщение

Пользователь: {user-nickname} — никнейм пользователя, {user-email} — e-mail пользователя, {user-city} — город пользователя, {user-city-id} — id города пользователя, {user-url} — ссылка на профиль пользователя, {user-avatar} — ссылка на аватар пользователя, {user-avatar-src} — аватар пользователя, {user-поле} — значение из профиля пользователя, например {user-hobby} — текст из поля "О себе", {user-spr} — количество записей пользователя в типе контента spr, {user-spr-url} — ссылка на записи пользователя в типе контента spr, {user-comments} — количество комментариев пользователя, {user-comments-url} — ссылка на комментарии пользователя, {user-friends-10} — список друзей поьзователя с аватарками (10 — количество, сколько выводить), {user-friend-add} — добавить пользователя в друзья, {user-friendslink} — все друзья пользователя(ссылка), {user-message} — написать пользователю личное сообщение

Поле Дата: — {fieldname} — значение поля в исходном формате, {fieldname*} — значение поля в формате 01.04.2018, {fieldname*time} — значение поля в формате 01.04.2018 06:40:00, {fieldname-literal} — дата прописью, {fieldname-literal-time} — дата прописью плюс время.

Видимость текста: [$=5,6,7]любой текст[/$] где 5,6,7 — это список групп, которые будут видеть этот фрагмент текста через запятую. [$=!5,6,7]любой текст[/$] напротив запретит показ указанным группам. Также вместо списка групп можно указывать параметры is_guest, is_logged, is_admin, !is_guest, !is_logged, !is_admin

Конструкции if-else: Конструкции [if {category-id}==5]выводим это[else]выводим то[/if][empty=поле не заполнено] позволяют выводить любые конструкции в зависимости от значения полей. В качестве аргументов сравнения можно задавать как любые доступные в поле переменные так и любые числовые и строковые значения ({field}==молоко, {category}!={rubric}, {ctype-id}>=10 и т.д.). Поддерживается полный набор арифметических операций — равно, не рабно, больше, меньше, больше или равно, меньще или равно.

Мультисписки — Конструкция вида {lb}любой окружающий текст {lb-id} и все что угодно {lb-value}{/lb} перечислит все выбранные пользователем пункты списка в нужном вам контексте. {lb} — имя поля, {lb-id} подставит ID выбранного значения, а {lb-value} — само выбранное значение. Аналогично поведения функции foreach.

— * перед закрывающей скобкой — с маленькой буквы, & — оригинал текста, пусто — с большой буквы

/blogs/kladovka-kodera/pole-seo-tekst-dlja-icms-2-obnovlenie-1-4-0.html
/blogs/kladovka-kodera/pole-seo-tekst-dlja-icms-2-obnovlenie-1-3-0.html
/blogs/kladovka-kodera/pole-seo-tekst-dlja-icms-2.html
0
RSN RSN 4 года назад #
Спасибо поле помогло решить проблему не решаемую стандартными средствами системы по СЕО.
0
RSN RSN 4 года назад #
ЗЫ:
0
Александр Витальевич Александр Витальевич 4 года назад #
А как получить обновление? Или была рассылка?
+2
vikont vikont 4 года назад #
Смотрите в своем кабинете на сайте DWD
0
Pawell Pawell 4 года назад #
Здравствуйте. А есть ли возможность вывести ссылку на текущую страницу $_SERVER["REQUEST_URI"]. Как это можно прописать?
+3
dwd dwd 4 года назад #
Не смог придумать ни одного примера, где бы то могло понадобиться. С точки зрения оптимизации это вообще считается злом. Так что специального тега для этой цели нет, но вы можете попробовать собрать нужную ссылку самостоятельно используя другие теги. Тут все зависит от конкретной задачи, которая перед вами стоит. Например, если вы говорите о страницах записей, то
Код HTML:
  1. <a href="/{ctype-name}/{item-slug}.html">Ссылка</a>
0
Pawell Pawell 4 года назад #
Спасибо. То, что нужно.
0
Андрей В Андрей В 2 года назад #

Такая конструкция, например, в разделе — «Новости» выводит следующее:
/News/6-vse-bolshe-rossijan-pokupayut-nedvizhimost-za-granicei.html

News — выводится c заглавной, из-за чего попадаем на страницу 404.
Замена — News|news почему-то не сработало.
Сработало склонение — News::news и паттерн: "/%~{ctype-name}~%2/{item-slug}.html".

Может есть какое-то более простое решение?
icms v2.14.2, шаблон — Modern

+2
dwd dwd 2 года назад #

Более простое решение есть — instantcms.ru/blogs/kladovka-kodera/pole-seo-tekst-dlja-icms-2.html
Цитирую:

Поддерживается автоматическое приведение значений к регистру. Знак *, добавленный к имени поля отвечает за то, будет ли первая буква являться заглавной. Например {category*} выведет «маркетинг», а {category} — «Маркетинг». Это позволяет использовать значения в любом контексте

Также для текстовых полей в версии 1.67 добавлен вывод неизменных значений. Используйте {title&} чтобы вывести текст в том виде, в котором его ввел пользователь. 

0
Pawell Pawell 4 года назад #
Пытаюсь вывести текстовое поле с содержимым:
Спойлер
в записи напрямую <?php echo html($item['имя поля']); ?> или <?php echo $item['имя поля']; ?>, но оно не отображается. В обычном режиме показывается во вновь созданных сообщениях.
+3
dwd dwd 4 года назад #
В установочном пакете есть замечательный файлик - readme.txt))
А еще в настройках поля есть галочка "Использовать кэш для показа на сайте".

В последних версиях системы результат рендеринга полей содержится не в массиве записи, а в $fieldset['fields'] и выводится вот таким образом:

Код PHP:
  1. <?php foreach ($fieldset['fields'] as $field) { ?>
  2. <div class="value"><?php echo $field['html']; ?></div>
  3. <?php } ?>
Поэтому либо используем кэширование и выводим как

Код PHP:
  1. <?php echo $fieldset['fields']['имя поля']; ?>
либо рендерим на лету

Код PHP:
  1. $fieldset['fields']['имя поля']['parser']->setItem($item)->parse(1);
0
Pawell Pawell 4 года назад #
Спасибо. Разобрался. Пришлось сделать запрос:
Код PHP:
  1. UPDATE `cms_con_articles` SET `название поля`=1;
чтобы поле появилось на всех ранее написанных страницах.
0
Сергей Сергей 2 года назад #
Продолжаю свои обычные надоедалки. 1.8.0 - 1.8.7 надо инсталлировать или файлы достаточно закинуть?
+2
dwd dwd 2 года назад #
Надоедайте, кто ж против?)
Применительно к данному случаю - без разницы. Поле не имеет собственных таблиц и прочих записей в БД.
Всегда и везде - достаточно закинуть файлы. Архитектуру таблиц я заранее привык продумывать так, чтобы ее не приходилось менять впоследствии. Если когда-нибудь при обновлении потребуются дополнительные действия, вы обязательно найдете эту информация в файле readme.txt установочного пакета. Если там ничего нет, значит ничего кроме замены файлов не требуется.
0
Сергей Сергей 2 года назад #
Благодарю, буду смотреть readme.txt. Не лёгкая это теперь работа обновляется, когда дополнений туча на сайте laugh .
Поля, поля, у вас такие поля, функционал как у трёх компонентов. Не верится что это одно поле столько может, и нет у него никаких баз данных. scratch
0
iton iton 2 года назад #

У меня есть поле список, там два варианта ответа «Да» и «Нет», пытаюсь сделать чтобы при выборе одного показывался текст но не получается может кто подскажет как правильно?

Поле: ddos

У типа контента id 8

В этом варианте у меня показывает, что поле не заполнено, хотя оно заполнено:

[if {ddos-8}==Да]DDoS[else]Нет[/if][empty=поле не заполнено]

При этом варианте, ничего не выводит на странице:

[if {ddos-8}==1]Выводим текст 1[else]Выводим текст 2[/if]

0
Сергей Сергей 2 года назад #

Не совсем понял зачем (У типа контента id 8) поле итак находится в этом типе контента?.

Мыслю так, как поле заполнено так и выводим.

[if {ddos}==1]Да текст любой[else][/if]

[if {ddos}==2]Нет текста если он не нужен[else][/if]

правда давно настраивал могу и ошибаться

0
iton iton 2 года назад #

Попробовал так сделать, поля остались пустыми, не появилось значение.

0
Сергей Сергей 2 года назад #

[if {category-id}==88]так у меня работает относительно категорий[else][/if]

Я же писал, что не совсем помню, вы  в поле инструкцию посмотрели?

Там всё написано, добавить что либо трудно.

— Списки: {fieldname-id} — текст по номеру, {fieldname-current} — текст текущего элемента, {fieldname_id} — id текущего элемента.

Выбирайте и вставляйте, что вам подходит.

0
iton iton 2 месяца назад #

я опять вернулся к этому вопросу ) только вопрос чуть в другом

Мне надо чтобы выводился текст с полем {test} если поле заполнено, поле «Конструктор списков» от dwd.

Пример:

Есть предложение «Пятница субботу воскресенье среда {test} вторник» и мне надо выводить все предложение если заполнено поле {test}, если поле не заполнено, то предложение не выводится.

не получается у меня написать в if что то, чтобы работало
[if ]Пятница субботу воскресенье среда {test} вторник[else][/if]

0
Сергей Сергей 2 месяца назад #

[if {test-id}== номер строки поля  «Конструктор списков» ]«выведет то что здесь вставите» [else][/if] Но толком я даже вопрос ваш не понял. 

0
iton iton 2 месяца назад #

) Реализовать, что я задумал не получилось, но спасибо за помощь!

Может кто еще, что подскажет, кто пользуется полем.

0
Ostrova Ostrova 1 месяц назад #

Попробуйте в паттерне поля поставить так:

||

Пятница субботу воскресенье среда {test} вторник

И в настройках поля включить галочку «вырезать связанные фразы»

0
Гарри Гарри 1 год назад #

С последней версией InstantCMS 2.15.2 будет работать?

+1
&$!#% &$!#% 1 год назад #

У меня работает. И inseo тоже.

0
Гарри Гарри 1 год назад #

Спасибо. 

0
Голдман Сакс Голдман Сакс 2 месяца назад #

Работает на последней версии. Автор просто гений!

Всех благ ему.

Еще от автора

Компонент «Продажа полей» для ICMS 2
Компонент для тотального управления продажей полей. Возможна оплата показа пользователями и самим автором. Масса типов продажи полей.
Компонент «Мотивация пользователей» для ICMS 2
Компонент предназначен для поощрения пользователей за систематическое посещение сайта.
Поле «Поддерживаю!» для ICMS 2
Поле «Поддерживаю!» предназначено для сбора голосов в решении какой-то задачи.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.