Как изменить главную страницу и изображение компонента из бэкэнда? как получить атрибуты тега HTML в php?

моя модель Settings.php

class Settings extends Model
{
    public $implement = ['System.Behaviors.SettingsModel'];
    // A unique code
    public $settingsCode = 'dca_plugins_settings';
    // Reference to field configuration
    public $settingsFields = 'fields.yaml';
    /**
     * @var array Relations
     */
    public $attachOne = [ 'avatar' => ['System\Models\File'] ];
}

мои поля.yaml

fields:
  id:
    label: ID
    disabled: true

  avatar:
    label: Avatar
    type: fileupload
    mode: image
    imageHeight: 150
    imageWidth: 250

мой компонент comp.php

public $avatar_id = 1;

public function getAvatarImage($avatar_id)
{
    $var = \System\Models\File::select('disk_name')->where('attachment_id', $avatar_id)->first();           
    if (count($var) == 0) return "";

    return $var->path;
} 

function setMyAvatarId($id)
{
    $this->avatar_id = $id;
} 

мой html default.htm

{% set avatar_id= __SELF__.property("avatar_id") %}

{% if avatar_id is not empty %}
{% do __SELF__.setMyAvatarId(avatar_id) %}
{% endif %}

<img id="avatar-image" alt="Virtual agent avatar" src="{{ __SELF__.getavatarImage(avatar_id) }}">
<script>
var avatar_id = {{ avatar_id }};
</script> 

Мне удается получить случайную ссылку, но изображение не отображается Мне удается получить случайную ссылку, но изображение не отображается

backend - настройки модели

бэкенд - настройки модели

Кто-нибудь знает, как определить свойства страницы? Как связать мою страницу с настройками модели?

Как заставить это работать? Кто-нибудь, пожалуйста, помогите мне~~ Я так потерян :(


person BEX    schedule 18.07.2016    source источник


Ответы (1)


Чтобы изменить изображение, вы можете добавить это к своей модели:

public $attachOne = ['avatarImage'];

и вам не нужно создавать столбец в базе данных с именем avatarImage, потому что October автоматически сохранит ваше изображение в другой таблице с именем «system_files» или что-то в этом роде. Итак, в вашем fields.yaml вам нужно будет добавить это:

avatarImage:
     type: mediafinder
     mode: image
     label: My Avatar

Затем October создаст виджет формы mediafinder в вашем контроллере настроек на панели управления, и вы сможете его изменить. И чтобы отобразить изображение на странице внешнего интерфейса, вам нужно будет добавить некоторый код в раздел кода php на странице.

$this['settings'] = //The Code to Get the Model;

И вы можете легко отобразить изображение, используя метод getPath().

<img src="{{ settings.getPath() }}" />

Если приведенный выше код не сработал, вы можете заменить его на:

<img src="{{ settings.getPath()|media" />

Я думаю, что второй будет работать правильно, я какое-то время не использовал октябрь :D

Я надеюсь, это поможет вам.

person Ahmed Essam    schedule 19.07.2016
comment
Спасибо :) Попробую позже. Кстати, вы знаете, как установить уникальный идентификатор для компонентов? так что, когда я дублирую компонент_1, оба компонента (компонент_1 и другой компонент_1) могут нормально работать на одной странице. - person BEX; 20.07.2016
comment
Я внес некоторые изменения в свой пост. Не могли бы вы взглянуть на это? Спасибо :) - person BEX; 20.07.2016
comment
На самом деле вы не можете установить идентификатор аватара таким образом. Но в любом случае проверьте исходный код страницы, если вы получили настоящее имя файла изображения, но путь не является полным путем, возможно, вам придется добавить |media в src в вашем интерфейсе. Если вы можете предоставить мне скриншот исходного кода отображаемой страницы, я могу понять и помочь вам больше. - person Ahmed Essam; 20.07.2016
comment
Я узнал, что ссылка была 1-м источником входа, вы знаете, как получить последний источник входа? потому что в моем comp.php я поместил $var = \System\Models\File::select('disk_name')-›where('attachment_id', $avatar_id)-›first(); Я думаю, это из-за first(), но я пытался изменить его на last(), но он не работает. - person BEX; 21.07.2016