Adiciona campo field_user_homepage e ícone de página pessoal no bloco

- Novo campo link field_user_homepage (página pessoal do usuário)
- Update hook 10009 para instalações existentes
- MicrositeHeaderBlock: variável #homepage via getFieldUri()
- Template: link com ícone 'home' como primeiro item nos links acadêmicos
- CSS: fill para ícone de casinha no fundo escuro do header

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-17 10:53:13 -03:00
parent 9ec7f951bf
commit 3257c89ff7
8 changed files with 137 additions and 1 deletions

View File

@@ -0,0 +1,22 @@
langcode: en
status: true
dependencies:
config:
- field.storage.user.field_user_homepage
module:
- link
- user
id: user.user.field_user_homepage
field_name: field_user_homepage
entity_type: user
bundle: user
label: 'Personal homepage'
description: 'URL of the user personal homepage.'
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings:
title: 0
link_type: 16
field_type: link

View File

@@ -0,0 +1,20 @@
langcode: en
status: true
dependencies:
module:
- link
- user
id: user.field_user_homepage
field_name: field_user_homepage
entity_type: user
type: link
settings:
title: 0
link_type: 16
module: link
locked: false
cardinality: 1
translatable: true
indexes: { }
persist_with_no_fields: false
custom_storage: false

View File

@@ -0,0 +1,2 @@
label: 'Página pessoal'
description: 'Endereço web da página pessoal do usuário.'

View File

@@ -20,6 +20,7 @@ function site_users_microsite_theme(): array {
'bio' => NULL,
'phone' => NULL,
'email' => NULL,
'homepage' => NULL,
'lattes_id' => NULL,
'orcid_id' => NULL,
'mathscinet_id' => NULL,

View File

@@ -68,6 +68,7 @@ class MicrositeHeaderBlock extends BlockBase implements ContainerFactoryPluginIn
'#bio' => $this->getProcessedValue($user, 'field_user_bio'),
'#phone' => $this->getFieldValue($user, 'field_user_phone'),
'#email' => $user->getEmail(),
'#homepage' => $this->getFieldUri($user, 'field_user_homepage'),
'#lattes_id' => $this->getFieldValue($user, 'field_user_id_lattes'),
'#orcid_id' => $this->getFieldValue($user, 'field_user_orcid'),
'#mathscinet_id' => $this->getFieldValue($user, 'field_user_mathscinetid'),
@@ -125,6 +126,16 @@ class MicrositeHeaderBlock extends BlockBase implements ContainerFactoryPluginIn
return $media ? $media->label() : '';
}
/**
* Retorna a URI de um campo link do usuário.
*/
protected function getFieldUri(UserInterface $user, string $field_name): ?string {
if ($user->hasField($field_name) && !$user->get($field_name)->isEmpty()) {
return $user->get($field_name)->uri;
}
return NULL;
}
/**
* Retorna o valor de texto de um campo do usuário.
*/

View File

@@ -11,6 +11,7 @@
* - bio: Biografia (string|null).
* - phone: Telefone (string|null).
* - email: E-mail (string|null).
* - homepage: URL da página pessoal (string|null).
* - lattes_id: ID do Currículo Lattes (string|null).
* - orcid_id: ORCID iD (string|null).
* - mathscinet_id: MathSciNet Author ID (string|null).
@@ -57,9 +58,18 @@
</ul>
{% endif %}
{% if lattes_id or orcid_id or mathscinet_id %}
{% if homepage or lattes_id or orcid_id or mathscinet_id %}
<div class="msite-header-block__academic-links">
{% if homepage %}
<a href="{{ homepage }}"
class="msite-header-block__academic-link msite-header-block__academic-link--homepage"
target="_blank" rel="noopener noreferrer"
aria-label="{{ 'Página pessoal'|t }}">
{{ site_tools_academic_icon('home') }}
</a>
{% endif %}
{% if lattes_id %}
<a href="https://lattes.cnpq.br/{{ lattes_id }}"
class="msite-header-block__academic-link msite-header-block__academic-link--lattes"

View File

@@ -548,6 +548,72 @@ function site_users_update_10008() {
return t('MathSciNet ID field created successfully.');
}
/**
* Cria o campo field_user_homepage para página pessoal do usuário.
*/
function site_users_update_10009() {
if (!FieldStorageConfig::loadByName('user', 'field_user_homepage')) {
FieldStorageConfig::create([
'field_name' => 'field_user_homepage',
'entity_type' => 'user',
'type' => 'link',
'settings' => [
'title' => 0,
'link_type' => 16,
],
'cardinality' => 1,
'translatable' => TRUE,
])->save();
}
if (!FieldConfig::loadByName('user', 'user', 'field_user_homepage')) {
FieldConfig::create([
'field_name' => 'field_user_homepage',
'entity_type' => 'user',
'bundle' => 'user',
'label' => 'Personal homepage',
'description' => 'URL of the user personal homepage.',
'required' => FALSE,
'settings' => [
'title' => 0,
'link_type' => 16,
],
])->save();
}
$form_display = EntityFormDisplay::load('user.user.default');
if ($form_display && !$form_display->getComponent('field_user_homepage')) {
$form_display->setComponent('field_user_homepage', [
'type' => 'link_default',
'weight' => 12,
'settings' => [
'placeholder_url' => 'https://',
'placeholder_title' => '',
],
'region' => 'content',
])->save();
}
$view_display = EntityViewDisplay::load('user.user.default');
if ($view_display && !$view_display->getComponent('field_user_homepage')) {
$view_display->setComponent('field_user_homepage', [
'type' => 'link',
'weight' => 12,
'label' => 'above',
'settings' => [
'trim_length' => 80,
'url_only' => FALSE,
'url_plain' => FALSE,
'rel' => 'noopener noreferrer',
'target' => '_blank',
],
'region' => 'content',
])->save();
}
return t('Campo field_user_homepage criado com sucesso.');
}
/**
* Corrige mapeamentos LDAP com campos de string nulos na config ativa.
*/

View File

@@ -268,6 +268,10 @@ body.microsite {
transition: opacity 0.15s, transform 0.15s;
}
.msite-header-block__academic-link--homepage svg {
fill: rgba(255, 255, 255, 0.85);
}
.msite-header-block__academic-link:hover svg {
opacity: 0.85;
transform: scale(1.1);