Generar urls en el dropdown selector

Para cuestiones relacionadas con el uso de los idiomas en Joomla, así como para hablar sobre las traducciones al español del core y cualquier extensión. Todas las versiones de Joomla.

Moderators: hefesto, carcam

Post Reply
jun3on
Joomla! Fledgling
Joomla! Fledgling
Posts: 4
Joined: Thu Apr 11, 2019 8:40 am

Generar urls en el dropdown selector

Post by jun3on » Thu Apr 11, 2019 8:57 am

Hola a todos,

Tengo una duda y revisando los posts del foro no he podido encontrar una solución.

Mi versión de joomla es la 3.9.1 y cuando utilizamos el selector de idioma en su modo "dropdown selector" me he dado cuenta de que los distintos idiomas no generan una url sino que recorren un array y cuando haces click te vas al idioma en cuestión, con la consecuente perdida de posicionamiento SEO ya que la home no está generando los enlaces a los idiomas.

Ejemplo de selector con banderas y enlaces:

Code: Select all

<ul class="lang-inline" dir="ltr">
	<li class="lang-active">
		<a href="http://www.someweb.com/">
		<img src="/media/mod_languages/images/es.gif" alt="ES" title="ES">
		</a>
	</li>
	<li>
		<a href="/en/">
		<img src="/media/mod_languages/images/en.gif" alt="EN" title="EN">
		</a>
	</li>
</ul>
Ejemplo de selector desplegable sin banderas y con códigos de idioma (ES, EN):

Code: Select all

<div class="chzn-drop">
	<div class="chzn-search">
		<input type="text" autocomplete="off" readonly="">
	</div>
	<ul class="chzn-results">
		<li class="active-result result-selected highlighted" data-option-array-index="0" style="">ES</li>
		<li class="active-result" data-option-array-index="1" style="">EN</li>
</div>
Hay alguna manera de que los "li" en el segundo caso (desplegable sin banderas y con códigos de idioma) contengan los enlaces como en el primer caso.

Un saludo y gracias de antemano

User avatar
john-doe
Joomla! Guru
Joomla! Guru
Posts: 874
Joined: Tue Apr 19, 2011 7:39 pm
Location: Colombia
Contact:

Re: Generar urls en el dropdown selector

Post by john-doe » Mon Apr 22, 2019 8:28 pm

Primero que todo actualice a 3.9.5.
Segundo le toca hacer un template oerride del módulo de lenguajes creando una carpeta html en la carpeta de la plantilla y dento de ella una mod_languages ( o bien pida un override en la segunda pestaña de la opción de la plantilla después de los archivos ). Una vez puesto hay un archivo default.php

(Si entiende de php) En el default.php hay dos partes, la primera que es la estructura de dropdown y la segunda la del menú de banderas. Solo tendría que reemplazar la estructura de selector por una de lista.
Algo por este estilo (si quiere use este código para reemplazar el default.php que le menciono):

Code: Select all

<?php
/**
 * @package     Joomla.Site
 * @subpackage  mod_languages
 *
 * @copyright   Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

JHtml::_('stylesheet', 'mod_languages/template.css', array('version' => 'auto', 'relative' => true));

if ($params->get('dropdown', 0) && !$params->get('dropdownimage', 1))
{
	JHtml::_('formbehavior.chosen');
}

?>
<div class="mod-languages<?php echo $moduleclass_sfx; ?>">
<?php if ($headerText) : ?>
	<div class="pretext"><p><?php echo $headerText; ?></p></div>
<?php endif; ?>

<?php if ($params->get('dropdown', 0) && !$params->get('dropdownimage', 1)) : ?>
	<div class="btn-group">
		<?php foreach ($list as $language) : ?>
			<?php if ($language->active) : ?>
				<a href="#" data-toggle="dropdown" class="btn dropdown-toggle">
					<?php echo strtoupper($language->sef);; ?>
                    <span class="caret"></span>  
				</a>
			<?php endif; ?>
		<?php endforeach; ?>
		<ul class="<?php echo $params->get('lineheight', 0) ? 'lang-block' : 'lang-inline'; ?> dropdown-menu dropright" dir="<?php echo JFactory::getLanguage()->isRtl() ? 'rtl' : 'ltr'; ?>">
		<?php foreach ($list as $language) : ?>
			<?php if (!$language->active) : ?>
				<li>
				<a href="<?php echo htmlspecialchars_decode(htmlspecialchars($language->link, ENT_QUOTES, 'UTF-8'), ENT_NOQUOTES); ?>">
				<?php echo $language->title_native; ?>
				</a>
				</li>
			<?php elseif ($params->get('show_active', 1)) : ?>
				<?php $base = JUri::getInstance(); ?>
				<li class="lang-active">
				<a href="<?php echo htmlspecialchars_decode(htmlspecialchars($base, ENT_QUOTES, 'UTF-8'), ENT_NOQUOTES); ?>">
				<?php echo $language->title_native; ?>
				</a>
				</li>
			<?php endif; ?>
		<?php endforeach; ?>
		</ul>
	</div>
<?php elseif ($params->get('dropdown', 0) && $params->get('dropdownimage', 1)) : ?>
	<div class="btn-group">
		<?php foreach ($list as $language) : ?>
			<?php if ($language->active) : ?>
				<a href="#" data-toggle="dropdown" class="btn dropdown-toggle">
					<span class="caret"></span>
					<?php if ($language->image) : ?>
						&nbsp;<?php echo JHtml::_('image', 'mod_languages/' . $language->image . '.gif', '', null, true); ?>
					<?php endif; ?>
					<?php echo $language->title_native; ?>
				</a>
			<?php endif; ?>
		<?php endforeach; ?>
		<ul class="<?php echo $params->get('lineheight', 0) ? 'lang-block' : 'lang-inline'; ?> dropdown-menu" dir="<?php echo JFactory::getLanguage()->isRtl() ? 'rtl' : 'ltr'; ?>">
		<?php foreach ($list as $language) : ?>
			<?php if (!$language->active) : ?>
				<li>
				<a href="<?php echo htmlspecialchars_decode(htmlspecialchars($language->link, ENT_QUOTES, 'UTF-8'), ENT_NOQUOTES); ?>">
					<?php if ($language->image) : ?>
						<?php echo JHtml::_('image', 'mod_languages/' . $language->image . '.gif', '', null, true); ?>
					<?php endif; ?>
				<?php echo $language->title_native; ?>
				</a>
				</li>
			<?php elseif ($params->get('show_active', 1)) : ?>
				<?php $base = JUri::getInstance(); ?>
				<li class="lang-active">
				<a href="<?php echo htmlspecialchars_decode(htmlspecialchars($base, ENT_QUOTES, 'UTF-8'), ENT_NOQUOTES); ?>">
					<?php if ($language->image) : ?>
						<?php echo JHtml::_('image', 'mod_languages/' . $language->image . '.gif', '', null, true); ?>
					<?php endif; ?>
				<?php echo $language->title_native; ?>
				</a>
				</li>
			<?php endif; ?>
		<?php endforeach; ?>
		</ul>
	</div>
<?php else : ?>
	<ul class="<?php echo $params->get('inline', 1) ? 'lang-inline' : 'lang-block'; ?>" dir="<?php echo JFactory::getLanguage()->isRtl() ? 'rtl' : 'ltr'; ?>">
	<?php foreach ($list as $language) : ?>
		<?php if (!$language->active) : ?>
			<li>
			<a href="<?php echo htmlspecialchars_decode(htmlspecialchars($language->link, ENT_QUOTES, 'UTF-8'), ENT_NOQUOTES); ?>">
			<?php if ($params->get('image', 1)) : ?>
				<?php if ($language->image) : ?>
					<?php echo JHtml::_('image', 'mod_languages/' . $language->image . '.gif', $language->title_native, array('title' => $language->title_native), true); ?>
				<?php else : ?>
					<span class="label"><?php echo strtoupper($language->sef); ?></span>
				<?php endif; ?>
			<?php else : ?>
				<?php echo $params->get('full_name', 1) ? $language->title_native : strtoupper($language->sef); ?>
			<?php endif; ?>
			</a>
			</li>
		<?php elseif ($params->get('show_active', 1)) : ?>
			<?php $base = JUri::getInstance(); ?>
			<li class="lang-active">
			<a href="<?php echo htmlspecialchars_decode(htmlspecialchars($base, ENT_QUOTES, 'UTF-8'), ENT_NOQUOTES); ?>">
			<?php if ($params->get('image', 1)) : ?>
				<?php if ($language->image) : ?>
					<?php echo JHtml::_('image', 'mod_languages/' . $language->image . '.gif', $language->title_native, array('title' => $language->title_native), true); ?>
				<?php else : ?>
					<span class="label"><?php echo strtoupper($language->sef); ?></span>
				<?php endif; ?>
			<?php else : ?>
				<?php echo $params->get('full_name', 1) ? $language->title_native : strtoupper($language->sef); ?>
			<?php endif; ?>
			</a>
			</li>
		<?php endif; ?>
	<?php endforeach; ?>
	</ul>
<?php endif; ?>

<?php if ($footerText) : ?>
	<div class="posttext"><p><?php echo $footerText; ?></p></div>
<?php endif; ?>
</div>
Aquí reemplacé el desplegable por una lista desplegable similar a la de banderas pero acondicionada a la plantilla para la que la diseñé.

Espero le sirva
www.aldemar-hernandez.com - Custom templates and design services.

jun3on
Joomla! Fledgling
Joomla! Fledgling
Posts: 4
Joined: Thu Apr 11, 2019 8:40 am

Re: Generar urls en el dropdown selector

Post by jun3on » Tue Jun 11, 2019 8:01 am

Hola john-doe,

Siento la demora en mi respuesta. En cuanto tenga un momento probaré lo que me comentas.

Muchísimas gracias por tu respuesta.


Post Reply

Return to “Idioma y traducciones”