Я новичок в разработке для Joomla и, похоже, нигде не могу найти приличной документации о том, как решить мою проблему. Вот моя цель: я хочу создать модуль Joomla, который позволит пользователю извлекать контент из репозитория и отображать его в модульном положении (моя компания имеет более 50 веб-сайтов для наших курортов, и у каждого сайта есть общие данные, что очень давно потреблять для поддержания на основе сайта). Я создал свой модуль, который может отображать элементы содержимого из моего центрального хранилища содержимого, и я хочу, чтобы пользователь мог выбирать фрагмент содержимого из всех фрагментов, доступных в моем центральном хранилище. Я создал свой пользовательский тип, и он создает поле выбора, содержащее заголовок и идентификатор каждого фрагмента, который может выбрать пользователь. Проблема, с которой я столкнулся, заключается в том, что после того, как пользователь выбрал фрагмент и сохранил его, Joomla сразу же забывает о выборе пользователя и ничего не отображает. Пример кода, сгенерированного моим пользовательским типом параметра:
<select name="ucr_content_id">
<option value="0">None</option>
<option value="8">Resort Page -- Atrium</option>
<option value="14">Resort Page -- Blue Heron</option>
<option value="15">Resort Page -- Blue Ridge Village </option>
<option value="16">Resort Page -- Cabins at Green Mountain</option>
<option value="17">Resort Page -- Church Street Inn</option>
<option value="18">Resort Page -- Ellington</option>
<option value="19">Resort Page -- Festiva Sailing Vacations</option>
<option value="20">Resort Page -- Frenchmen Orleans</option>
<option value="21">Resort Page -- Main Street Inn</option>
<option value="22">Resort Page -- Mirror Lake/Tamarack</option>
</select>
и код для моего пользовательского типа:
<?php
class JElementSnippetList extends JElement {
var $_name = "snippetList";
function fetchElement($name, $value, &$node, $control_name) {
// Base name of the HTML control.
$ctrl = $control_name . '[' . $name . ']';
$data = array();
// Construct the various argument calls that are supported.
if ($v = $node -> attributes('snippettype')) {
$data["type"] = $v;
}
$startTag = '<select name="'.$name.'"><option value="0">None</option>'.PHP_EOL;
$list_response = JElementSnippetList::post_request("http://path.to.repository/fetchSnippetList.php", $data);
if($list_response["status"] == 'ok'){
return $startTag.$list_response['content'];
}
}
public static function post_request($url, $data) {
$output = array();
foreach ($data as $key => $value) {
if(is_object($value) || is_array($value)){
$data[$key] = serialize($value);
}
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
if ($result) {
$output['status'] = "ok";
$output['content'] = $result;
} else {
$output['status'] = "failure";
$output['error'] = curl_error($ch);
}
curl_close($ch);
return $output;
}
}
?>
Кроме того, вот мой XML-файл конфигурации:
<?xml version="1.0" encoding="utf-8"?>
<install type="module" version="1.5.0">
<name>Universal Content Repository</name>
<author>Brendon Dugan</author>
<version>1.5.0</version>
<description>A module to allow the insertion of UCR Snippets into a Joomla site.</description>
<files>
<filename>mod_ucr.xml</filename>
<filename module="mod_ucr">mod_ucr.php</filename>
<filename>index.html</filename>
<filename>helper.php</filename>
<filename>tmpl/default.php</filename>
<filename>tmpl/index.html</filename>
<filename>elements/snippetList.php</filename>
<filename>elements/index.html</filename>
</files>
<params addpath="/modules/mod_ucr/elements">
<param name="ucr_repository" type="text" default="http://path.to.repository/" label="Repository Fetch URL" description="" size="40" />
<param name="ucr_script_id" type="snippetList" snippettype="js" default="" label="Script ID" description="" />
<param name="ucr_css_id" type="snippetList" snippettype="css" default="" label="CSS ID" description="" size="10" />
<param name="ucr_content_id" type="snippetList" snippettype="content" default="" label="Content ID" description="" size="10" />
</params>
</install>
Есть идеи? Я посмотрел следующие учебные пособия, но, как и в большинстве документов Joomla, они, похоже, не содержат важную информацию:
Типы пользовательских параметров
Тип параметра для выбора нескольких элементов
SQLMultiSelectX