Skip to content
Open
12 changes: 9 additions & 3 deletions redaxo/src/addons/structure/lib/linkmap/var_link.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ protected function getOutput()
$value = self::getWidget($id, 'REX_INPUT_LINK[' . $id . ']', $value, $args);
} else {
if ($value && $this->hasArg('output') && 'id' != $this->getArg('output')) {
return 'rex_getUrl(' . self::quote($value) . ')';
[$articleId, $hash] = array_pad(explode('#', $value, 2), 2, null);
return 'rex_getUrl(' . self::quote($articleId) . ')' . ($hash ? ' . \'#\' . ' . self::quote($hash) : '') . ';';
}
}

Expand All @@ -50,12 +51,16 @@ protected function getOutput()
public static function getWidget($id, $name, $value, array $args = [])
{
$artName = '';
$art = rex_article::get($value);
[$articleId, $hash] = array_pad(explode('#', $value, 2), 2, null);
$art = rex_article::get((int) $articleId);
$category = rex_category::getCurrent() ? rex_category::getCurrent()->getId() : 0; // Aktuelle Kategorie vorauswählen

// Falls ein Artikel vorausgewählt ist, dessen Namen anzeigen und beim Öffnen der Linkmap dessen Kategorie anzeigen
if ($art instanceof rex_article) {
$artName = trim(sprintf('%s [%s]', $art->getName(), $art->getId()));
if (null !== $hash && '' !== $hash) {
$artName .= ' #' . $hash;
}
$category = $art->getCategoryId();
}

Expand All @@ -71,11 +76,12 @@ public static function getWidget($id, $name, $value, array $args = [])
$deleteFunc = '';
if (rex::requireUser()->getComplexPerm('structure')->hasStructurePerm()) {
$class = '';
$escapedId = rex_escape($id, 'js');
$escapedId = rex_escape($id, 'js') ?? '';
$openFunc = 'openLinkMap(\'REX_LINK_' . $escapedId . '\', \'' . $openParams . '\');';
$deleteFunc = 'deleteREXLink(\'' . $escapedId . '\');';
}

$id = rex_escape((string) $id, 'html_attr') ?? '';
$e = [];
$e['field'] = '<input class="form-control" type="text" name="REX_LINK_NAME[' . $id . ']" value="' . rex_escape($artName) . '" id="REX_LINK_' . $id . '_NAME" readonly="readonly" /><input type="hidden" name="' . $name . '" id="REX_LINK_' . $id . '" value="' . $value . '" />';
$e['functionButtons'] = '
Expand Down
16 changes: 11 additions & 5 deletions redaxo/src/addons/structure/lib/linkmap/var_linklist.php
Original file line number Diff line number Diff line change
Expand Up @@ -60,32 +60,38 @@ public static function getWidget($id, $name, $value, array $args = [])
if ('' == $link) {
continue;
}
if ($article = rex_article::get((int) $link)) {
$options .= '<option value="' . $link . '">' . rex_escape(trim(sprintf('%s [%s]', $article->getName(), $article->getId()))) . '</option>';
[$articleId, $hash] = array_pad(explode('#', $link, 2), 2, null);
if (null !== $articleId && '' !== $articleId && $article = rex_article::get((int) $articleId)) {
$label = trim(sprintf('%s [%s]', $article->getName(), $article->getId()));
if (null !== $hash && '' !== $hash) {
$label .= ' #' . $hash;
}
$options .= '<option value="' . $link . '">' . rex_escape($label) . '</option>';
}
}

$disabled = ' disabled';
$openFunc = '';
$deleteFunc = '';
$quotedId = "'" . rex_escape($id, 'js') . "'";
$quotedId = "'" . rex_escape((string) $id, 'js') . "'";
if (rex::requireUser()->getComplexPerm('structure')->hasStructurePerm()) {
$disabled = '';
$openFunc = 'openREXLinklist(' . $quotedId . ', \'' . $openParams . '\');';
$deleteFunc = 'deleteREXLinklist(' . $quotedId . ');';
}

$id = rex_escape((string) $id, 'html_attr') ?? '';
$e = [];
$e['field'] = '
<select class="form-control" name="REX_LINKLIST_SELECT[' . $id . ']" id="REX_LINKLIST_SELECT_' . $id . '" size="10">
' . $options . '
</select>
<input type="hidden" name="' . $name . '" id="REX_LINKLIST_' . $id . '" value="' . $value . '" />';
$e['moveButtons'] = '
<a href="#" class="btn btn-popup" onclick="moveREXLinklist(' . $quotedId . ',\'top\');return false;" title="' . rex_i18n::msg('var_linklist_move_top') . '"><i class="rex-icon rex-icon-top"></i></a>
<a href="#" class="btn btn-popup" onclick="moveREXLinklist(' . $quotedId . ',\'top\');return false;" title="' . rex_i18n::msg('var_linklist_move_top') . '"><i class="rex-icon-top rex-icon"></i></a>
<a href="#" class="btn btn-popup" onclick="moveREXLinklist(' . $quotedId . ',\'up\');return false;" title="' . rex_i18n::msg('var_linklist_move_up') . '"><i class="rex-icon rex-icon-up"></i></a>
<a href="#" class="btn btn-popup" onclick="moveREXLinklist(' . $quotedId . ',\'down\');return false;" title="' . rex_i18n::msg('var_linklist_move_down') . '"><i class="rex-icon rex-icon-down"></i></a>
<a href="#" class="btn btn-popup" onclick="moveREXLinklist(' . $quotedId . ',\'bottom\');return false;" title="' . rex_i18n::msg('var_linklist_move_bottom') . '"><i class="rex-icon rex-icon-bottom"></i></a>';
<a href="#" class="btn btn-popup" onclick="moveREXLinklist(' . $quotedId . ',\'bottom\');return false;" title="' . rex_i18n::msg('var_linklist_move_bottom') . '"><i class="rex-icon-bottom rex-icon"></i></a>';
$e['functionButtons'] = '
<a href="#" class="btn btn-popup" onclick="' . $openFunc . 'return false;" title="' . rex_i18n::msg('var_link_open') . '"' . $disabled . '><i class="rex-icon rex-icon-open-linkmap"></i></a>
<a href="#" class="btn btn-popup" onclick="' . $deleteFunc . 'return false;" title="' . rex_i18n::msg('var_link_delete') . '"' . $disabled . '><i class="rex-icon rex-icon-delete-link"></i></a>';
Expand Down
20 changes: 10 additions & 10 deletions redaxo/src/addons/structure/plugins/content/install.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,16 +49,16 @@
->ensureColumn(new rex_sql_column('medialist8', 'text', true))
->ensureColumn(new rex_sql_column('medialist9', 'text', true))
->ensureColumn(new rex_sql_column('medialist10', 'text', true))
->ensureColumn(new rex_sql_column('link1', 'varchar(10)', true))
->ensureColumn(new rex_sql_column('link2', 'varchar(10)', true))
->ensureColumn(new rex_sql_column('link3', 'varchar(10)', true))
->ensureColumn(new rex_sql_column('link4', 'varchar(10)', true))
->ensureColumn(new rex_sql_column('link5', 'varchar(10)', true))
->ensureColumn(new rex_sql_column('link6', 'varchar(10)', true))
->ensureColumn(new rex_sql_column('link7', 'varchar(10)', true))
->ensureColumn(new rex_sql_column('link8', 'varchar(10)', true))
->ensureColumn(new rex_sql_column('link9', 'varchar(10)', true))
->ensureColumn(new rex_sql_column('link10', 'varchar(10)', true))
->ensureColumn(new rex_sql_column('link1', 'varchar(255)', true))
->ensureColumn(new rex_sql_column('link2', 'varchar(255)', true))
->ensureColumn(new rex_sql_column('link3', 'varchar(255)', true))
->ensureColumn(new rex_sql_column('link4', 'varchar(255)', true))
->ensureColumn(new rex_sql_column('link5', 'varchar(255)', true))
->ensureColumn(new rex_sql_column('link6', 'varchar(255)', true))
->ensureColumn(new rex_sql_column('link7', 'varchar(255)', true))
->ensureColumn(new rex_sql_column('link8', 'varchar(255)', true))
->ensureColumn(new rex_sql_column('link9', 'varchar(255)', true))
->ensureColumn(new rex_sql_column('link10', 'varchar(255)', true))
->ensureColumn(new rex_sql_column('linklist1', 'text', true))
->ensureColumn(new rex_sql_column('linklist2', 'text', true))
->ensureColumn(new rex_sql_column('linklist3', 'text', true))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -384,13 +384,13 @@ public function getValueArray(int $index): ?array

/**
* @param int $index
* @return int|null
* @return string|null
*/
public function getLink($index)
{
$link = $this->links[$index - 1];

return null === $link ? null : (int) $link;
return $link ?? null;
}

/**
Expand All @@ -400,8 +400,9 @@ public function getLink($index)
public function getLinkUrl($index)
{
$link = $this->getLink($index);
[$articleId, $hash] = array_pad(explode('#', (string) $link, 2), 2, null);

return null === $link ? null : rex_getUrl($link);
return null === $link ? null : ($hash ? rex_getUrl($articleId) . '#' . $hash : rex_getUrl($articleId));
}

/**
Expand Down