Joomla создать список выбора опций, который сохраняет данные в базу данных (из профиля пользователя)

Я хочу создать небольшой проект. На странице пользователя joomla пользователи могут выбрать фон заголовка / обложки. Они не могут загружать изображения, они могут просто выбрать фоновые изображения, которые я уже загрузил в папку на сервере.

Так что мне нужно что-то вроде этого из серверной части:

<form action="index.php" method="post" enctype="multipart/form-data">
 <select>
  <option value="1">Background image 1</option>
  <option value="2">Background image 2</option>
  <option value="3">Background image 3</option>
  <option value="4">Background image 4</option>
 </select>
 <button type="submit">Change header</button>
</form>

Затем показать фон на основе значений:

<?php 
if ($user_profile->headerbackground==1) {
    echo '<img src="link" />';
}else if ($user_profile->headerbackground==2) {
    echo '<img src="link" />';
}else if ($user_profile->headerbackground==3){
    echo '<img src="link" />';
}
?>

В базе данных я могу создать в правой таблице профиля пользователя Joomla новый столбец с именем headerbackground. В этом столбце база данных будет сохранять только такие значения, как 1,2,3,4... в зависимости от выбранной опции.

Надеюсь, кто-нибудь может мне помочь.

1 ответ

Попробуйте это в вашем шаблоне переопределить. Вместо зацикливания я просто беру одно конкретное поле, поэтому вам может потребоваться настроить [1] в зависимости от значения.

в верхней части файла переопределения шаблона:

JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php'); //load fields helper

А потом позже

$customFieldnames = FieldsHelper::getFields('com_users.user',JFactory::getUser(), true); // get custom field names by user id
$customFieldIds = array_map(create_function('$o', 'return $o->id;'), $customFieldnames); //get custom field Ids by custom field names
$model = JModelLegacy::getInstance('Field', 'FieldsModel', array('ignore_request' => true)); //load fields model
$customFieldValues = $model->getFieldValues($customFieldIds , $item['id']); //Fetch values for custom field Ids

$background_image = $customFieldValues[1];

if($background_image == 1) {
    echo '<img src="images/Fornite.jpg" />';
} elseif($background_image == 2) {
    echo '<img src="images/Blue.jpg" />';
} elseif($background_image == 3) {
    echo '<img src="images/Black.jpg" />';
} else {
    echo '<img src="images/whatever.jpg" />';
}

Я обновил, так как вы просто храните числовое значение вместо пути к изображению. Если это не работает, вам нужно отобразить $ background_image, чтобы увидеть, какое значение он тянет.

Глядя на ваш скринкаст, я не уверен, что вы делаете с $background_image->default_value, возможно, это проблема.

Другие вопросы по тегам