Перейти к публикации

Ссылка на полную версию с картинки в краткой версии


Рекомендованные сообщения

Сайт 21region.org

Есть необходимость, что бы с эскизов, которые находятся в краткой версии, можно было кликом перейти в полную версию.

Есть ли какой то способ, кроме как лопатить все новости или базу, и ставить ссылки?

Ссылка на сообщение
Поделиться на других сайтах

Есть идея для этого модуля, или хака.

В show.custom.php нужно запросить первую картинку с таблицы dle_images. Затем вывести её в виде ссылки.

Есть ли специалисты которые могут сделать этот модуль?

Ссылка на сообщение
Поделиться на других сайтах

Опишите подробнее. Почему именно show.custom.php?

Может проще просто через парсер или прямо в show.short.php производить замену?

Ссылка на сообщение
Поделиться на других сайтах

  26.03.2010 в 19:37, kangalexey сказал:

Опишите подробнее. Почему именно show.custom.php?

Может проще просто через парсер или прямо в show.short.php производить замену?

Извиняюсь, перепутал имя файла, когда копировал через Total.

Действительно, думаю что нужно запрашивать в show.short.php

Именно мне было бы удобнее замена в show.short.php т.к. у меня уже есть база на 400 новостей, в которой уже в dle_post - short_story вставлены

<div align=\"center\"><!--TBegin--><a href=\"http://********/uploads/posts/2010-01/1263404702_image3.png\" onclick=\"return hs.expand(this)\" ><img style=\"border: none; margin: 5px;\" src=\"http://*********/uploads/posts/2010-01/thumbs/1263404702_image3.png\" alt=\'***\' title=\'***\'  /></a><!--TEnd--></div>

т.е. уже забиты тумбы.

Но если бы я забивал новости заного, то мне было бы удобно вообще не добавлять тумбы в краткую версию, и что бы движок просто добавлял в краткую версию ссылку в виде первой картинки.

Однако мне не сложно удалить тумбы. Удалять легче чем вписывать ссылки вообще вручную.

Был бы признателен, если бы кто то помог в разработке этого модуля. Он расширил бы возможности DLE.

Думаю что не мне одному это понадобится. Допустим в WordPress такая функция есть по умолчанию.

Ссылка на сообщение
Поделиться на других сайтах

Все равно не понял...

Видимо уже поздно, почти сутки не спал, а уже 5 утра. Плохо соображаю... :(

Давайте подробное ТЗ, на досуге напишу.

Ссылки должны быть применены только к тумбам или ко всем картинкам?

Ссылка на сообщение
Поделиться на других сайтах

  26.03.2010 в 19:54, kangalexey сказал:

Все равно не понял...

Видимо уже поздно, почти сутки не спал, а уже 5 утра. Плохо соображаю... :(

Наверное моя вина, не очень толково расписал мысль...

  26.03.2010 в 19:54, kangalexey сказал:

Давайте подробное ТЗ, на досуге напишу.

Ссылки должны быть применены только к тумбам или ко всем картинкам?

Если по простому, то план такой:

После установки этого модуля, всё картинки в краткой версии становятся ссылками, которые ведут в полную версию новости.

Желательно что бы модуль не вносил изменение в базу данных, а выводил ссылки во время вывода новости, что бы была возможность просто выключить модуль.

Спасибо.

Изменено пользователем Medik
Ссылка на сообщение
Поделиться на других сайтах

В файле show.short.php

найти:

if( $view_template == "rss" ) {
Перед этим добавить:
		if(preg_match("#<img src=(.+?)>#ie", $row['short_story'])) {


			$fulllinkfrom = array("<!--dle_image_begin:", "<!--dle_image_end-->", "<!--TBegin-->", "<!--TEnd-->");

			$fulllinkto = array("<a href=\"$full_link\" ><!--dle_image_begin:", "<!--dle_image_end--></a>", "<a href=\"$full_link\" ><!--TBegin-->", "<!--TEnd--></a>");


			$row['short_story'] = str_replace($fulllinkfrom, $fulllinkto, $row['short_story']);


			$row['short_story'] = preg_replace( "#<!--TBegin-->.+?<img(.+?)>.+?<!--TEnd-->#", "<!--TBegin--><img\\1><!--TEnd-->", $row['short_story'] );

		}

Ссылка на сообщение
Поделиться на других сайтах

  27.03.2010 в 18:15, kangalexey сказал:

В файле show.short.php

найти:

if( $view_template == "rss" ) {
Перед этим добавить:
		if(preg_match("#<img src=(.+?)>#ie", $row['short_story'])) {


			$fulllinkfrom = array("<!--dle_image_begin:", "<!--dle_image_end-->", "<!--TBegin-->", "<!--TEnd-->");

			$fulllinkto = array("<a href=\"$full_link\" ><!--dle_image_begin:", "<!--dle_image_end--></a>", "<a href=\"$full_link\" ><!--TBegin-->", "<!--TEnd--></a>");


			$row['short_story'] = str_replace($fulllinkfrom, $fulllinkto, $row['short_story']);


			$row['short_story'] = preg_replace( "#<!--TBegin-->.+?<img(.+?)>.+?<!--TEnd-->#", "<!--TBegin--><img\\1><!--TEnd-->", $row['short_story'] );

		}

Попробовал на http://tvorite.ru (Лицензия имеется, активирована).

Картинки по прежнему открываются в виде увеличенных изображений...

Ссылка на сообщение
Поделиться на других сайтах

Попробуйте так:

                if(preg_match("#<img(.+?)>#ie", $row['short_story'])) {


                        $fulllinkfrom = array("<!--dle_image_begin:", "<!--dle_image_end-->", "<!--TBegin-->", "<!--TEnd-->");

                        $fulllinkto = array("<a href=\"$full_link\" ><!--dle_image_begin:", "<!--dle_image_end--></a>", "<a href=\"$full_link\" ><!--TBegin-->", "<!--TEnd--></a>");


                        $row['short_story'] = str_replace($fulllinkfrom, $fulllinkto, $row['short_story']);


                        $row['short_story'] = preg_replace( "#<!--TBegin-->.+?<img(.+?)>.+?<!--TEnd-->#", "<!--TBegin--><img\\1><!--TEnd-->", $row['short_story'] );

                }

Ссылка на сообщение
Поделиться на других сайтах

  27.03.2010 в 19:18, kangalexey сказал:

Попробуйте так:

                if(preg_match("#<img(.+?)>#ie", $row['short_story'])) {


                        $fulllinkfrom = array("<!--dle_image_begin:", "<!--dle_image_end-->", "<!--TBegin-->", "<!--TEnd-->");

                        $fulllinkto = array("<a href=\"$full_link\" ><!--dle_image_begin:", "<!--dle_image_end--></a>", "<a href=\"$full_link\" ><!--TBegin-->", "<!--TEnd--></a>");


                        $row['short_story'] = str_replace($fulllinkfrom, $fulllinkto, $row['short_story']);


                        $row['short_story'] = preg_replace( "#<!--TBegin-->.+?<img(.+?)>.+?<!--TEnd-->#", "<!--TBegin--><img\\1><!--TEnd-->", $row['short_story'] );

                }

Супер. Работает!

Огромное спасибо.

P.S.: Думаю что было бы логично добавить эту функцию в настройки в админ-центре, т.е. дать пользователям возможность включать или выключать функцию через админку...

Изменено пользователем Medik
Ссылка на сообщение
Поделиться на других сайтах

kangalexey, сейчас если в краткой версии просто картинка, а не эскиз, нету ссылки на полную новость.

Вы не могли бы дописать и эту функцию?

Изменено пользователем Medik
Ссылка на сообщение
Поделиться на других сайтах

Просто у вас обычные изображения добавляются без комментариев типа

<!--dle_image_begin

Почему это происходит я не знаю, если дадите объяснение, то перепишу код.

Ссылка на сообщение
Поделиться на других сайтах

  28.03.2010 в 10:33, kangalexey сказал:

Просто у вас обычные изображения добавляются без комментариев типа

<!--dle_image_begin

Почему это происходит я не знаю, если дадите объяснение, то перепишу код.

Я проанализировал файлы DLE.

Оказывается dle_image_begin появился в последней версии DLE 8.3

Все остальные версии не будут работать :(

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

Думаю что тут нужно либо обновлять парсер parse.class.php, что невозможно при не имении лицензии, или изменять парсер самому, и дописывать туда свой код.

Изменено пользователем Medik
Ссылка на сообщение
Поделиться на других сайтах

  25.03.2010 в 10:00, Medik сказал:

Сайт 21region.org

Есть необходимость, что бы с эскизов, которые находятся в краткой версии, можно было кликом перейти в полную версию.

Есть ли какой то способ, кроме как лопатить все новости или базу, и ставить ссылки?

На новые новости можно сделать очень просто используя стандартные средства движка через дополнительные поля новостей

В админ панели добавить в Дополнительные поля новостей

Название поле- picture

Тип поля - Одна строка

Значение по умолчанию - http:// {указываю путь к картинки при добавление новости, которую загружаю через upload}

В shortstory.tpl изменить:

<tr>

<td style="width: 225px;">[xfgiven_picture][full-link]<img src="[xfvalue_picture]" width="200" height="150" border="0" align="left" alt="" />[/full-link][/xfgiven_picture]&nbsp;</td>

<td>{short-story}</td>

</tr>

как это выглядит:

http://www.clipso.name/stock/

Изменено пользователем leksey
Ссылка на сообщение
Поделиться на других сайтах

  28.03.2010 в 13:11, leksey сказал:

  25.03.2010 в 10:00, Medik сказал:

Сайт 21region.org

Есть необходимость, что бы с эскизов, которые находятся в краткой версии, можно было кликом перейти в полную версию.

Есть ли какой то способ, кроме как лопатить все новости или базу, и ставить ссылки?

На новые новости можно сделать очень просто используя стандартные средства движка через дополнительные поля новостей

В админ панели добавить в Дополнительные поля новостей

Название поле- picture

Тип поля - Одна строка

Значение по умолчанию - http:// {указываю путь к картинки при добавление новости, которую загружаю через upload}

В shortstory.tpl изменить:

<tr>

<td style="width: 225px;">[xfgiven_picture][full-link]<img src="[xfvalue_picture]" width="200" height="150" border="0" align="left" alt="" />[/full-link][/xfgiven_picture]&nbsp;</td>

<td>{short-story}</td>

</tr>

как это выглядит:

http://www.clipso.name/stock/

C таким же успехом можно руками вписывать ссылки после публикации новости. По трудозатратам примерно одно и то же.

Ссылка на сообщение
Поделиться на других сайтах

  28.03.2010 в 13:39, Medik сказал:

  28.03.2010 в 13:11, leksey сказал:

  25.03.2010 в 10:00, Medik сказал:

Сайт 21region.org

Есть необходимость, что бы с эскизов, которые находятся в краткой версии, можно было кликом перейти в полную версию.

Есть ли какой то способ, кроме как лопатить все новости или базу, и ставить ссылки?

На новые новости можно сделать очень просто используя стандартные средства движка через дополнительные поля новостей

В админ панели добавить в Дополнительные поля новостей

Название поле- picture

Тип поля - Одна строка

Значение по умолчанию - http:// {указываю путь к картинки при добавление новости, которую загружаю через upload}

В shortstory.tpl изменить:

<tr>

<td style="width: 225px;">[xfgiven_picture][full-link]<img src="[xfvalue_picture]" width="200" height="150" border="0" align="left" alt="" />[/full-link][/xfgiven_picture]&nbsp;</td>

<td>{short-story}</td>

</tr>

как это выглядит:

http://www.clipso.name/stock/

C таким же успехом можно руками вписывать ссылки после публикации новости. По трудозатратам примерно одно и то же.

для новых новостей почти никаких трудозатрат, на вашем сайте и так много доп полей при добавление новости, просто появится еще одно поле

Так на основе этого попробовать написат хак, что б все это сделать, картинка к короткой новости уже загружена...

Изменено пользователем leksey
Ссылка на сообщение
Поделиться на других сайтах

  Цитата
Я проанализировал файлы DLE.

Оказывается dle_image_begin появился в последней версии DLE 8.3

Все остальные версии не будут работать

ОК, на досуге перепишу код под ваши нужды.

  Цитата
Я так понимаю сложность заключается в том, что в новости может быть картинка в виде ссылки, и если парсить её, то ссылка будет просто вложена одна в другую.

Думаю что тут нужно либо обновлять парсер parse.class.php, что невозможно при не имении лицензии, или изменять парсер самому, и дописывать туда свой код.

А у вас что нет лицензии?

Ссылка на сообщение
Поделиться на других сайтах

  29.03.2010 в 11:17, kangalexey сказал:

А у вас что нет лицензии?

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

На другом проекте лицензия есть, но нет права обновлять скрипты, т.к. годовая лицензия закончилась.

С точки зрения продавца скрипты выгодно сказать: "Обновляйтесь, и всё будет работать".

С точки зрения универсального модуля, нужно либо доработать модуль, либо обновить parse.class.php.

Взять кусок кода с parse.class.php будет считаться воровством.

Поэтому, для старых версий, нужно либо постараться написать модуль универсально, допустим проверять что бы картинка не была ссылкой, и только тогда делать ссылку.

Либо приписать свою разметку в parse.class.php, которую потом проверять в show.custom.php и делать ссылки на выходе. Но это плохой вариант, т.к. старые новости не будут работать.

P.S.: В принципе, того что вы написали лично мне хватило. Спасибо за помощь.

Изменено пользователем Medik
Ссылка на сообщение
Поделиться на других сайтах

  Цитата
P.S.: В принципе, того что вы написали лично мне хватило. Спасибо за помощь.

Я же написал:

  Цитата
ОК, на досуге перепишу код под ваши нужды.

Значит можно не писать?

Ссылка на сообщение
Поделиться на других сайтах

  29.03.2010 в 11:57, kangalexey сказал:

Значит можно не писать?

Думаю если вы напишете универсальный модуль, вам скажут спасибо все пользователи DLE, и это будет полноценный хак для DLE.

Ссылка на сообщение
Поделиться на других сайтах

  Цитата
Думаю если вы напишете универсальный модуль, вам скажут спасибо все пользователи DLE, и это будет полноценный хак для DLE.

Нет, универсальный я писать не буду. Тот что я написал он своего рода универсален, но только под версии, как вы заметили, выше 8.3

Его недочет состоит в том, что если картинка будет скрыта под ссылку средствами тегов

примерно так:

[code][url=link][img=img_link][/url]

То на выходе получится что одна ссылка будет внутри другой.

Но на работе это никак не скажется, так как, в любом случае, будет действовать та ссылка, которая будет ближе охватывать картинку. Такой приоритет HTML'а.

Поэтому недочетом это назвать сложно.

Плюс есть небольшая нагрузка на PHP, а если учитывать каждую версию, то эта нагрузка возрастет.

Ссылка на сообщение
Поделиться на других сайтах
  • 5 месяцев спустя...

  28.03.2010 в 14:31, leksey сказал:

  28.03.2010 в 13:39, Medik сказал:

C таким же успехом можно руками вписывать ссылки после публикации новости. По трудозатратам примерно одно и то же.

для новых новостей почти никаких трудозатрат, на вашем сайте и так много доп полей при добавление новости, просто появится еще одно поле

Так на основе этого попробовать написат хак, что б все это сделать, картинка к короткой новости уже загружена...

Нашел хак как можно сделать кликабельныю картинку описано здесь http://4dle.ru/hacks/1147158861-vyvod-kartinki-tegom.html

Ссылка на сообщение
Поделиться на других сайтах
  • 2 недели спустя...

  27.03.2010 в 19:22, Medik сказал:

  27.03.2010 в 19:18, kangalexey сказал:

Попробуйте так:

                if(preg_match("#<img(.+?)>#ie", $row['short_story'])) {


                        $fulllinkfrom = array("<!--dle_image_begin:", "<!--dle_image_end-->", "<!--TBegin-->", "<!--TEnd-->");

                        $fulllinkto = array("<a href=\"$full_link\" ><!--dle_image_begin:", "<!--dle_image_end--></a>", "<a href=\"$full_link\" ><!--TBegin-->", "<!--TEnd--></a>");


                        $row['short_story'] = str_replace($fulllinkfrom, $fulllinkto, $row['short_story']);


                        $row['short_story'] = preg_replace( "#<!--TBegin-->.+?<img(.+?)>.+?<!--TEnd-->#", "<!--TBegin--><img\\1><!--TEnd-->", $row['short_story'] );

                }

Супер. Работает!

Огромное спасибо.

P.S.: Думаю что было бы логично добавить эту функцию в настройки в админ-центре, т.е. дать пользователям возможность включать или выключать функцию через админку...

Хак работает только для шаблона shortstory.tpl

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

Ссылка на сообщение
Поделиться на других сайтах

Не уверен - нужно проверять, - но вроде дело в регулярке. Что там выводится на сайте по умолчанию - не смотрел, поэтому вслепую...

Эту строку:

$row['short_story'] = preg_replace( "#<!--TBegin-->.+?<img(.+?)>.+?<!--TEnd-->#", "<!--TBegin--><img\\1><!--TEnd-->", $row['short_story'] );
Заменить на:
$row['short_story'] = preg_replace( "#<!--TBegin-->.*?<img([^>]*)>.*?<!--TEnd-->#", "<!--TBegin--><img\\1><!--TEnd-->", $row['short_story'] );
Но скорее всего так (кажись, промежуточная ссыль мешает):
$row['short_story'] = preg_replace( "#<!--TBegin-->(?:<[^>]*>)?<img([^>]*)>(?:<[^>]*>)?<!--TEnd-->#", "<!--TBegin--><img\\1><!--TEnd-->", $row['short_story'] );

Учёт необязательных скобок не помню - нужен или нет в регулярке? - в общем получится либо <img\\1>, либо <img\\2>.

Luci, вы в асе пропали, поэтому так попробуйте, если не заработает, то тогда не знаю где и что ковырять... нужно всё распечатывать и проверять новости, мне сейчас эксперементировать некогда.

Ссылка на сообщение
Поделиться на других сайтах

Всё остаётся без изменений

я так понимаю что проблема здесь не в шаблона и т.д.

а в методе выбора из бд

вот этой конструкцией {custom category="2,7" template="custom" aviable="global" from="0" limit="10" cache="yes"} выбор из бд происходит напрямую и не обрабатывается этим хаком

Может кто подскажет решение?

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...