Теги alt и title для двойки

В картинках не выводятся теги alt и title

#1 9 февраля 2015 в 01:10
Как решить проблему с выводом тегов alt и title в картинках? Есть пустые теги но хотелось бы чтобы в них хотя бы добавлялось название статьи. Как это можно реализовать в двойке? Может уже кто-то решил эту проблему? Если да, то буду благодарен за подсказку.
#2 9 февраля 2015 в 23:04
Энное время назад уже задавал тут подобный вопрос: instantcms.ru/forum/thread20513.html
Ответа тогда не последовало по сути, так что присоединюсь к Вашему вопросу в этот раз :)
#3 10 февраля 2015 в 00:18
Присоединяюсь. Важный вопрос. Я его поднимал в теме по пожеланиям для 2-ки. Надеюсь что авторы обратят внимание, и в ближайшем обновлении это будет учтено.
#4 10 февраля 2015 в 01:33
По разному, уточните где именно вы хотите такое сделать? Title and alt одно и тоже должно быть записано?
#5 10 февраля 2015 в 01:42
  1. <?php echo html_image_src($item[$image_field], $size, true); ?>
Вот этот код выводит урл фото, можно сделать так
Зайти в нужный файл и заменить там вывод фото на это <img alt="<?php html($item['title']); ?>" src="<?php echo html_image_src($item[$image_field], $size, true); ?>">
<?php html($item['title']); ?> title это то что будет записано в альт, в данном случае это название страницы. Можно заменить на любое имя поля из типа контента.
#6 10 февраля 2015 в 04:05

Вот этот код выводит урл фото, можно сделать так
Зайти в нужный файл и заменить там вывод фото на это <img alt="<?php html($item['title']); ?>" src="<?php echo html_image_src($item[$image_field], $size, true); ?>">
<?php html($item['title']); ?> title это то что будет записано в альт, в данном случае это название страницы. Можно заменить на любое имя поля из типа контента.

Atid — Gorec

Ваше решение не подходит для вывода тега alt в статьях так как код вывода картинок для типа контента статьи, новости, совсем другой.
Код картинки для вывода её в статье берётся в файле /system/fields/image.php а там код картинки выглядит так:
  1. return '<img src="'.$config->upload_host . '/' . $paths[ $this->getOption('size_full') ].'" border="0" />';
Сама страница статьи формируется в этом файле /templates/default/content/default_item.tpl.php и в неё подтягивается картинка с выше приведённого кода за счёт этого кода:
  1.  
  2. <div class="value">
  3.  
  4. <?php
  5. echo $field['html'];
  6. ?>
  7.  
  8. </div>
  9.  
Так что ваше решение подходит только в виджетах но не в статьях или новостях.
Я прописал в этот код тег alt="" и он выводится, но пустой, чтобы я туда не вставлял.
  1. return '<img src="'.$config->upload_host . '/' . $paths[ $this->getOption('size_full') ].'" border="0" alt="" />';
#7 10 февраля 2015 в 05:24


Вот этот код выводит урл фото, можно сделать так
Зайти в нужный файл и заменить там вывод фото на это

Atid — Gorec

Игорь Lu

Вот ещё код вывода картинок:
  1.  
  2. <div class="image">
  3. <a href="<?php echo $url; ?>"><?php echo html_image($item[$image_field], 'micro'); ?></a>
  4. </div>
  5.  
Как здесь прописать alt="" тоже не понятно.

Остаётся надеяться на разработчиков и на то, что со следующим обновлением проблема с тегами aln и title в картинках всё таки будет решена.
Хотя, конечно, хотелось докопаться до истины раньше. Поэтому вопрос остаётся открытым.
#8 10 февраля 2015 в 09:07
Мое решение подходит)). Вы меня не поняли.
  1. <div class="value">
  2.  
  3. <?php
  4. echo $field['html'];
  5. ?>
  6.  
  7. </div>
Вот этот код позволяет в админке типи контента выбрать какое поле здесь выводить, можно автора вывести, можно анонс а можно картинку. То есть она такая чтобы у вас был выбор что туда вставить. Я даю вам готовый код изображения, то есть там будет выводиться именно изображение и только.
<?php echo html_image($item[$image_field], 'micro'); ?> Этот код выведет все изображение, ее можно допилить в helper файле и добавить возможность указания дополнительных данных, и этот код формируется не /system/fields/image.php а \system\libs\html.helper.php
<?php echo html_image_src($item[$image_field], $size, true); ?> этот код выводит ссылку на изображение. Создаем тег <img > в поле для ссылки тавим <?php echo html_image_src($item[$image_field], $size, true); ?> <img src="<?php echo html_image_src($item[$image_field], $size, true); ?>"> а в поле альт ставим название статьи <img alt="<?php html($item['title']); ?>" src="<?php echo html_image_src($item[$image_field], $size, true); ?>">
#9 10 февраля 2015 в 14:01


Мое решение подходит)). Вы меня не поняли.

  1.  
  2.  
  3.  
  4.  
  5.  
Вот этот код позволяет в админке типы контента выбрать какое поле здесь выводить, можно автора вывести, можно анонс а можно картинку. То есть она такая чтобы у вас был выбор что туда вставить. Я даю вам готовый код изображения, то есть там будет выводиться именно изображение и только.
Этот код выведет все изображение, ее можно допилить в helper файле и добавить возможность указания дополнительных данных, и этот код формируется не /system/fields/image.php а \system\libs\html.helper.php
этот код выводит ссылку на изображение. Создаем тег в поле для ссылки ставим

Atid — Gorec

Я всё равно не понимаю как реализовать ваше решение.

В файле \system\libs\html.helper.php есть код вывода маленьких картинок где указан вывод тега alt="" и указано выводить его пустым.
  1.  
  2. function html_image($image, $size_preset='small', $alt=''){
  3.  
  4. $size = $size_preset == 'micro' ? 'width="32" height="32"' : '';
  5.  
  6. return '<img src="'.html_image_src($image, $size_preset, true).'" border="0" '.$size.' alt="'.htmlspecialchars($alt).'" />';
  7.  
  8. }
  9.  
Результат вывода картинки

  1.  
  2. <div class="image">
  3. <img src="/upload/000/u1/000/0c13e9ac.jpg" alt="" height="32" width="32" border="0"> </div>
  4.  
Как сделать чтобы он был не пустым?
Можете показать на примере, я просто в программировании не шарю.
#10 10 февраля 2015 в 19:57

Как сделать чтобы он был не пустым?
Можете показать на примере, я просто в программировании не шарю.

Игорь Lu
В шаблоне вывода (template\имя_шаблона\content\тип_контента) пропишите там где нужен вывод картинки следующее:
  1. <img src="<?php echo html_image_src($item['image'], 'big', true); ?>" alt="<?php html($item['title']); ?>" border="0">
image — системное имя поля с картинкой
big — размер картинки (из тех вариантов что выбираются в настройках поля)

И удаляете картинку из цикла вывода полей ( <?php foreach($fields as $name=>$field){ ?> ):
  1. <?php if ($name == 'image') { continue; } ?>
Возможно есть и более элегантное решение не завязанное на жестко задание системного имени поля с изображением.
#11 10 февраля 2015 в 22:11
Altернативный велосипед:
прописываем нужные атрибуты скриптом. Добавляем куда нибудь в файл ..\templates\default\content\default_item.tpl.php (отвечает за вывод контента) следующий код
  1. <script type="text/javascript">
  2. $( document ).ready(function() {
  3. $('img').each(function(indx){
  4. $(this).attr({"alt":"<?php html($item['title']); ?>", "title":"<?php html($item['title']); ?>"});
  5. });
  6. });
  7. </script>
Ко всем картинкам на текущей странице будет добавляться атрибут alt и title с параметром равным заголовку текущей страницы.

плюсы метода: правится только файл шаблона, т.е. это не хак (не трогает ядро системы) и не слетит при обновлении))
минусы: сама задача не стоит такого решения =))

P.S. понятно что использовать код можно лишь при сильной необходимости и пока данный функционал не реализуют в движке "из коробки"
#12 11 февраля 2015 в 00:09


Altернативный велосипед:
прописываем нужные атрибуты скриптом. Добавляем куда нибудь в файл ..\templates\default\content\default_item.tpl.php (отвечает за вывод контента) следующий код

  1.  
  2. $( document ).ready(function() {
  3. $('img').each(function(indx){
  4. $(this).attr({"alt":"", "title":""});
  5. });
  6. });
  7.  
Ко всем картинкам на текущей странице будет добавляться атрибут alt и title с параметром равным заголовку текущей страницы.

плюсы метода: правится только файл шаблона, т.е. это не хак (не трогает ядро системы) и не слетит при обновлении))
минусы: сама задача не стоит такого решения =))

P.S. понятно что использовать код можно лишь при сильной необходимости и пока данный функционал не реализуют в движке "из коробки"

Val

Спасибо, для отдельной статьи помогло, но для страницы категории с анонсами, нет, в каждой картинке выводит одно и тоже название которое берётся из последнего анонса статьи.

Ладно, пускай пока будет так, и на том спасибо.
Последнее слово за разработчиками.

Тему правда пока не закрываю, может ещё у кого-то появится идея реализации данного вопроса.
#13 15 февраля 2015 в 16:00
Вопрос такой. Пока нет реализации вывода alt и title в поле image, пытаюсь обойтись прописыванием этих тегов в редакторе статьи (добавляю картинку через редактор). При этом тег альт выводится корректно, а title просто пропадает. Иначе говоря, код в редакторе такой: <img alt="Альт картинки" title="Тайтл картинки" src="/images/img.jpg">, а выводится на странице <img alt="Альт картинки" src="/images/img.jpg">.
Подскажите, почему так?
#14 17 февраля 2015 в 10:56
В html.helper.php сделал так
  1.  
  2. // return '<img src="'.html_image_src($image, $size_preset, true).'" border="0" '.$size.' alt="'.htmlspecialchars($alt).'" />';
  3. return html_image_src($image, $size_preset, true);
  4.  
А в выводе к примеру в файле list_basic.tpl.php
Вывел вот так
  1.  
  2. <div class="image">
  3. <a href="<?php echo $url; ?>"><img src="<?php echo html_image($item[$image_field]); ?>" alt="<? html($item['title']); ?>" ></a>
  4. </div>
  5.  
И так во всех виджетах изменить и будет alt
#15 12 июля 2015 в 01:22
Расскажу и я о своем решении данной проблемы, если что то неправильно сделал, просьба подправить.
В общем у меня для каждого типа контента есть поле "изображение аватар", т.е. оно отображается в списке и в записе. Для них я хотел иметь теги альт и тайтл равные названию записи.

/system/libs/html.helper.php строчка 405 сделал вот такой код.

  1. function html_image($image, $size_preset='small', $alt=''){
  2.  
  3. $size = $size_preset == 'micro' ? 'width="32" height="32"' : '';
  4.  
  5. $src = html_image_src($image, $size_preset, true);
  6.  
  7. if (!$src) { return false; }
  8.  
  9. if (!$alt) {
  10. return '<img src="'.$src.'" border="0" '.$size.'" />';
  11. }
  12. else {return '<img src="'.$src.'" border="0" '.$size.' alt="'.htmlspecialchars($alt).'" title="'.htmlspecialchars($alt).'" />';}
  13. }
Т.е. у нас есть некий параметр функции alt, который можно задать из шаблона.

Далее во всех файлах списка, которые я использую. Например для плитки (templates/default/content/default_list_tiles.tpl.php) прописал такой код

  1. <?php if (isset($fields['photo']) && $fields['photo']['is_in_list'] && !empty($item['photo'])){ ?>
  2. <div class="photo">
  3. <?php if ($fields['date_pub']['is_in_list']){ ?>
  4. <div class="note" title="<?php echo $fields['date_pub']['title']; ?>">
  5. <?php echo $fields['date_pub']['handler']->parse( $item['date_pub'] ); ?>
  6. </div>
  7. <?php } ?>
  8. <a href="<?php echo href_to($ctype['name'], $item['slug'].'.html'); ?>">
  9. <?php echo html_image($item['photo'], 'big', $item['title']); ?>
  10. <?php unset($item['photo']); ?>
  11. </a>
  12. </div>
  13. <?php } ?>
  14.  
Т.е. прописал этот параметр альт, где мне нужно в шаблоне. Что там было первоначально, уже не помню, давно менял.

Осталось наладить теги в записи. Правим файл default_item.tpl.php в этой же папке. Строчка 44 сделал вот такой код
  1.  
  2. <div class="value">
  3.  
  4. <?php
  5. if ($field['type']=='image'){echo html_image($item['photo'], 'big', $item['title']);}
  6. else {echo $field['html'];}
  7. ?>
  8.  
  9. </div>
  10.  
До этой правки в этом файле был такой код
  1.  
  2. <div class="value">
  3.  
  4. <?php
  5. echo $field['html'];
  6. ?>
  7.  
  8. </div>
  9.  
Надеюсь понятно описал, то что мне нужно добился. Осталось только одна проблема, не знаю как буду обновляться на новую версию. Не помню что и где изменял уже.

Ну и как всегда попрошайничаю: если кому помог — плюсуйте карму, если ошибся, подправьте.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.