В Joomla! Вы можете изменить код целевой страницы / страницы по умолчанию с помощью переопределений шаблонов.
Хотя добавление HTML-элементов и классов является простой задачей, я не могу понять две вещи:
Если вы переопределите «избранный» макет компонента контента, в основном у вас будет простой макет блога. Я бы предпочел определить 5 статей, которые используются для разных целей на странице.
Например:
article_col1: article-1
article_col2: article-2
article_col3: article-3
article_description: article-4
article_contact: article-5
Могу ли я сделать это и как?
редактировать 2015/09/03:
Я понимаю, что мне нужно изменить файл XML, описывающий тип пункта меню и его параметры. Сейчас я скопировал «featured.xml» и добавил раздел запроса из «article.xml»:
<fields name="request">
<fieldset name="request"addfieldpath="/administrator/components/com_content/models/fields">
<field name="id_contact" type="modal_article"label="COM_CONTENT_FIELD_SELECT_ARTICLE_LABEL"required="true"edit="true"clear="false"description="COM_CONTENT_FIELD_SELECT_ARTICLE_DESC"/>
<!-- and some more article fields -->
</fieldset>
</fields>
Таким образом, теперь я могу назначать статьи для пункта меню.
Но как я могу получить доступ и отобразить их в файле макета?
Я вижу, что вступительные статьи доступны через $this->intro_items
, к несчастью $this->id_contact->text
не работает Должен ли я сказать Joomla, чтобы где-нибудь загрузить статьи из базы данных?
Если бы я мог устанавливать, просматривать и отображать эти статьи, я мог бы использовать плагин для отображения формы контакта в одной из статей.
Однако я знаю, что хочу показать контактную форму отдельного контакта на моей целевой странице, и плагин для этого очень единственного случая кажется мне излишним.
Есть ли способ включить форму через код PHP?
В качестве преамбулы я хотел бы отметить, что очень маленький, выделенный компонент был бы идеальным для этого решения. Причина в том, что переопределения шаблонов предназначены для изменения способа представления данных существующей модели, поэтому вы не можете контролировать, что приложение собирается доставлять через $ this-> items.
И, как указывал комментатор на мой ответ, все, что вы пытаетесь сделать, может быть достигнуто с помощью популярных статей и модулей.
Что, как говорится 🙂
Прежде всего, вы должны встроить пользовательский набор полей запроса в существующий контейнер. Кроме того, поскольку вы хотите выбрать и отобразить 5 разных статей, вам также понадобится поле для каждой из них. Таким образом, раздел полей article.xml будет выглядеть так:
<fields name="params">
<fieldset name="request" label="Article" addfieldpath="/administrator/components/com_content/models/fields">
<field
name="article_1"type="modal_article"label="Custom Article 1"required="true"edit="true"clear="false"description="COM_CONTENT_FIELD_SELECT_ARTICLE_DESC"/>
<field
name="article_2"type="modal_article"label="Custom Article 2"required="true"edit="true"clear="false"description="COM_CONTENT_FIELD_SELECT_ARTICLE_DESC"/>
<field
name="article_3"type="modal_article"label="Custom Article 3"required="true"edit="true"clear="false"description="COM_CONTENT_FIELD_SELECT_ARTICLE_DESC"/>
<field
name="article_4"type="modal_article"label="Custom Article 4"required="true"edit="true"clear="false"description="COM_CONTENT_FIELD_SELECT_ARTICLE_DESC"/>
<field
name="article_5"type="modal_article"label="Custom Article 5"required="true"edit="true"clear="false"description="COM_CONTENT_FIELD_SELECT_ARTICLE_DESC"/>
</fieldset>
</fields>
Теперь для доступа к данным внутри файла article.php используйте:
$menu = JFactory::getApplication()->getMenu()->getActive();
$article_1 = $menu->params->get('article_1');
$article_2 = $menu->params->get('article_2');
$article_3 = $menu->params->get('article_3');
$article_4 = $menu->params->get('article_4');
$article_5 = $menu->params->get('article_5');
К сожалению, это просто даст вам идентификаторы статей. Быстрый и простой способ получить статьи — использовать класс таблицы com_content следующим образом:
$article = JTable::getInstance('content');
$article->load($article_1);
Теперь вы можете отображать содержание статьи, используя:
echo $this->escape($article->introtext);
Встраивание формы немного сложнее, особенно если вы работаете только с шаблоном. Я предлагаю использовать одно из бесплатных расширений в JED (Joomla Extension Directory) для создания формы и использовать один из их модулей для отображения. Joomla имеет встроенный плагин Load Module, который при активации позволяет встраивать модули в другие статьи, используя:
{loadmodule mod_myform, My Custom Form Title}
В противном случае вам нужно будет создать свой собственный модуль и определение формы xml, а также множество других вещей, которые, честно говоря, должны составлять отдельный вопрос, если вы хотите продолжить этот путь.
Надеюсь это поможет.
Я думаю, вам нужно сделать шаг назад и немного понять, как работает Joomla. Я не уверен, что вы использовали ранее, но я думаю, что вы делаете вещи слишком сложными. Смысл использования CMS, такой как Joomla, заключается в том, что по большей части вам не нужно писать собственные запросы. И вы бы никогда не поместили запрос в шаблон, это не имеет смысла. В частности, макеты шаблонов предназначены для html, и вы используете PHP только для того, чтобы сказать «повторить этот фрагмент содержимого здесь» или иногда для управления циклическим просмотром содержимого.
Это также является недостатком минимальных выборочных данных. Если вы работаете со сложным сайтом и совсем не знаете Joomla, вам следует создать экземпляр с образцом данных «learn Joomla» и просто возиться с опциями, пока вы не поймете, как он работает. Это покажет вам все встроенные опции, а также покажет вам несколько более продвинутых способов проявить креативность с ними в образце магазина фруктовых магазинов. Минимальные выборочные данные действительно лучше всего подходят для опытных пользователей, людей, которые собираются сделать очень простой сайт, или людей, которые собираются читать книги или документы или смотреть видео о том, как сделать более сложный сайт. В противном случае, как я уже сказал, вы должны установить сложные образцы данных на сайте, чтобы просто покончить с ними и удалить, когда вы закончите.
Итак, прежде всего, концепция рекомендуемого контента заключается в том, что вы переходите к менеджеру статей и выбираете статьи, которые хотите отображать в избранном представлении, отмечая их как избранные. Поэтому первое, что вы должны сделать, это пойти и отметить статьи, которые вы хотите показать на своей домашней странице. Затем перейдите к представлению Featured в com_content и разместите их в нужном вам порядке и установите любые параметры отображения для отдельных статей.
Затем в вашей ссылке на рекомендуемое меню, которая также будет помечена как ссылка по умолчанию, вы должны указать расположение, которое вы хотите, т.е. количество столбцов, в которых вы хотите разместить статьи, и вы можете иметь сочетание разметки по всей ширине и с несколькими столбцами.
Тогда единственная проблема заключается в том, что вы хотите отобразить фактическую форму контакта, а не ссылку на форму контакта на главной странице, верно?
Скорее всего, я бы сделал модуль с формой. Вероятно, вы можете найти один из них в каталоге расширений, но вы также можете написать его самостоятельно.