Medik 6 Опубликовано: 25 марта 2010 Рассказать Опубликовано: 25 марта 2010 Сайт 21region.org Есть необходимость, что бы с эскизов, которые находятся в краткой версии, можно было кликом перейти в полную версию. Есть ли какой то способ, кроме как лопатить все новости или базу, и ставить ссылки? Цитата Ссылка на сообщение Поделиться на других сайтах
Medik 6 Опубликовано: 26 марта 2010 Рассказать Опубликовано: 26 марта 2010 Автор Есть идея для этого модуля, или хака. В show.custom.php нужно запросить первую картинку с таблицы dle_images. Затем вывести её в виде ссылки. Есть ли специалисты которые могут сделать этот модуль? Цитата Ссылка на сообщение Поделиться на других сайтах
kang 42 Опубликовано: 26 марта 2010 Рассказать Опубликовано: 26 марта 2010 Опишите подробнее. Почему именно show.custom.php? Может проще просто через парсер или прямо в show.short.php производить замену? 1 Цитата Ссылка на сообщение Поделиться на других сайтах
Medik 6 Опубликовано: 26 марта 2010 Рассказать Опубликовано: 26 марта 2010 Автор Опишите подробнее. Почему именно 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 такая функция есть по умолчанию. Цитата Ссылка на сообщение Поделиться на других сайтах
kang 42 Опубликовано: 26 марта 2010 Рассказать Опубликовано: 26 марта 2010 Все равно не понял... Видимо уже поздно, почти сутки не спал, а уже 5 утра. Плохо соображаю... Давайте подробное ТЗ, на досуге напишу. Ссылки должны быть применены только к тумбам или ко всем картинкам? 1 Цитата Ссылка на сообщение Поделиться на других сайтах
Medik 6 Опубликовано: 26 марта 2010 Рассказать Опубликовано: 26 марта 2010 (изменено) Автор Все равно не понял... Видимо уже поздно, почти сутки не спал, а уже 5 утра. Плохо соображаю... Наверное моя вина, не очень толково расписал мысль... Давайте подробное ТЗ, на досуге напишу. Ссылки должны быть применены только к тумбам или ко всем картинкам? Если по простому, то план такой: После установки этого модуля, всё картинки в краткой версии становятся ссылками, которые ведут в полную версию новости. Желательно что бы модуль не вносил изменение в базу данных, а выводил ссылки во время вывода новости, что бы была возможность просто выключить модуль. Спасибо. Изменено 26 марта 2010 пользователем Medik Цитата Ссылка на сообщение Поделиться на других сайтах
kang 42 Опубликовано: 27 марта 2010 Рассказать Опубликовано: 27 марта 2010 В файле 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'] ); } Цитата Ссылка на сообщение Поделиться на других сайтах
Medik 6 Опубликовано: 27 марта 2010 Рассказать Опубликовано: 27 марта 2010 Автор В файле 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 (Лицензия имеется, активирована). Картинки по прежнему открываются в виде увеличенных изображений... Цитата Ссылка на сообщение Поделиться на других сайтах
kang 42 Опубликовано: 27 марта 2010 Рассказать Опубликовано: 27 марта 2010 Попробуйте так: 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'] ); } 1 Цитата Ссылка на сообщение Поделиться на других сайтах
Medik 6 Опубликовано: 27 марта 2010 Рассказать Опубликовано: 27 марта 2010 (изменено) Автор Попробуйте так: 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.: Думаю что было бы логично добавить эту функцию в настройки в админ-центре, т.е. дать пользователям возможность включать или выключать функцию через админку... Изменено 27 марта 2010 пользователем Medik Цитата Ссылка на сообщение Поделиться на других сайтах
Medik 6 Опубликовано: 28 марта 2010 Рассказать Опубликовано: 28 марта 2010 (изменено) Автор kangalexey, сейчас если в краткой версии просто картинка, а не эскиз, нету ссылки на полную новость. Вы не могли бы дописать и эту функцию? Изменено 28 марта 2010 пользователем Medik Цитата Ссылка на сообщение Поделиться на других сайтах
kang 42 Опубликовано: 28 марта 2010 Рассказать Опубликовано: 28 марта 2010 Просто у вас обычные изображения добавляются без комментариев типа <!--dle_image_begin Почему это происходит я не знаю, если дадите объяснение, то перепишу код. Цитата Ссылка на сообщение Поделиться на других сайтах
Medik 6 Опубликовано: 28 марта 2010 Рассказать Опубликовано: 28 марта 2010 (изменено) Автор Просто у вас обычные изображения добавляются без комментариев типа <!--dle_image_begin Почему это происходит я не знаю, если дадите объяснение, то перепишу код. Я проанализировал файлы DLE. Оказывается dle_image_begin появился в последней версии DLE 8.3 Все остальные версии не будут работать Я так понимаю сложность заключается в том, что в новости может быть картинка в виде ссылки, и если парсить её, то ссылка будет просто вложена одна в другую. Думаю что тут нужно либо обновлять парсер parse.class.php, что невозможно при не имении лицензии, или изменять парсер самому, и дописывать туда свой код. Изменено 28 марта 2010 пользователем Medik Цитата Ссылка на сообщение Поделиться на других сайтах
leksey 0 Опубликовано: 28 марта 2010 Рассказать Опубликовано: 28 марта 2010 (изменено) Сайт 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] </td> <td>{short-story}</td> </tr> как это выглядит: http://www.clipso.name/stock/ Изменено 28 марта 2010 пользователем leksey Цитата Ссылка на сообщение Поделиться на других сайтах
Medik 6 Опубликовано: 28 марта 2010 Рассказать Опубликовано: 28 марта 2010 Автор Сайт 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] </td> <td>{short-story}</td> </tr> как это выглядит: http://www.clipso.name/stock/ C таким же успехом можно руками вписывать ссылки после публикации новости. По трудозатратам примерно одно и то же. Цитата Ссылка на сообщение Поделиться на других сайтах
leksey 0 Опубликовано: 28 марта 2010 Рассказать Опубликовано: 28 марта 2010 (изменено) Сайт 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] </td> <td>{short-story}</td> </tr> как это выглядит: http://www.clipso.name/stock/ C таким же успехом можно руками вписывать ссылки после публикации новости. По трудозатратам примерно одно и то же. для новых новостей почти никаких трудозатрат, на вашем сайте и так много доп полей при добавление новости, просто появится еще одно поле Так на основе этого попробовать написат хак, что б все это сделать, картинка к короткой новости уже загружена... Изменено 28 марта 2010 пользователем leksey Цитата Ссылка на сообщение Поделиться на других сайтах
kang 42 Опубликовано: 29 марта 2010 Рассказать Опубликовано: 29 марта 2010 Я проанализировал файлы DLE. Оказывается dle_image_begin появился в последней версии DLE 8.3 Все остальные версии не будут работать ОК, на досуге перепишу код под ваши нужды. Я так понимаю сложность заключается в том, что в новости может быть картинка в виде ссылки, и если парсить её, то ссылка будет просто вложена одна в другую. Думаю что тут нужно либо обновлять парсер parse.class.php, что невозможно при не имении лицензии, или изменять парсер самому, и дописывать туда свой код. А у вас что нет лицензии? Цитата Ссылка на сообщение Поделиться на других сайтах
Medik 6 Опубликовано: 29 марта 2010 Рассказать Опубликовано: 29 марта 2010 (изменено) Автор А у вас что нет лицензии? На одном из проектов у меня есть актуальная лицензия, можно обновить скрипты до актуальной версии. На другом проекте лицензия есть, но нет права обновлять скрипты, т.к. годовая лицензия закончилась. С точки зрения продавца скрипты выгодно сказать: "Обновляйтесь, и всё будет работать". С точки зрения универсального модуля, нужно либо доработать модуль, либо обновить parse.class.php. Взять кусок кода с parse.class.php будет считаться воровством. Поэтому, для старых версий, нужно либо постараться написать модуль универсально, допустим проверять что бы картинка не была ссылкой, и только тогда делать ссылку. Либо приписать свою разметку в parse.class.php, которую потом проверять в show.custom.php и делать ссылки на выходе. Но это плохой вариант, т.к. старые новости не будут работать. P.S.: В принципе, того что вы написали лично мне хватило. Спасибо за помощь. Изменено 29 марта 2010 пользователем Medik Цитата Ссылка на сообщение Поделиться на других сайтах
kang 42 Опубликовано: 29 марта 2010 Рассказать Опубликовано: 29 марта 2010 P.S.: В принципе, того что вы написали лично мне хватило. Спасибо за помощь. Я же написал: ОК, на досуге перепишу код под ваши нужды. Значит можно не писать? Цитата Ссылка на сообщение Поделиться на других сайтах
Medik 6 Опубликовано: 29 марта 2010 Рассказать Опубликовано: 29 марта 2010 Автор Значит можно не писать? Думаю если вы напишете универсальный модуль, вам скажут спасибо все пользователи DLE, и это будет полноценный хак для DLE. Цитата Ссылка на сообщение Поделиться на других сайтах
kang 42 Опубликовано: 29 марта 2010 Рассказать Опубликовано: 29 марта 2010 Думаю если вы напишете универсальный модуль, вам скажут спасибо все пользователи DLE, и это будет полноценный хак для DLE. Нет, универсальный я писать не буду. Тот что я написал он своего рода универсален, но только под версии, как вы заметили, выше 8.3 Его недочет состоит в том, что если картинка будет скрыта под ссылку средствами тегов примерно так: [code][url=link][img=img_link][/url] То на выходе получится что одна ссылка будет внутри другой. Но на работе это никак не скажется, так как, в любом случае, будет действовать та ссылка, которая будет ближе охватывать картинку. Такой приоритет HTML'а. Поэтому недочетом это назвать сложно. Плюс есть небольшая нагрузка на PHP, а если учитывать каждую версию, то эта нагрузка возрастет. Цитата Ссылка на сообщение Поделиться на других сайтах
leksey 0 Опубликовано: 16 сентября 2010 Рассказать Опубликовано: 16 сентября 2010 C таким же успехом можно руками вписывать ссылки после публикации новости. По трудозатратам примерно одно и то же. для новых новостей почти никаких трудозатрат, на вашем сайте и так много доп полей при добавление новости, просто появится еще одно поле Так на основе этого попробовать написат хак, что б все это сделать, картинка к короткой новости уже загружена... Нашел хак как можно сделать кликабельныю картинку описано здесь http://4dle.ru/hacks/1147158861-vyvod-kartinki-tegom.html Цитата Ссылка на сообщение Поделиться на других сайтах
Luci 0 Опубликовано: 30 сентября 2010 Рассказать Опубликовано: 30 сентября 2010 Попробуйте так: 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 Каким образом заставить его работать и с другими шаблонами, созданными для отображения короткой новости? Цитата Ссылка на сообщение Поделиться на других сайтах
zgr 72 Опубликовано: 6 октября 2010 Рассказать Опубликовано: 6 октября 2010 Не уверен - нужно проверять, - но вроде дело в регулярке. Что там выводится на сайте по умолчанию - не смотрел, поэтому вслепую... Эту строку: $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, вы в асе пропали, поэтому так попробуйте, если не заработает, то тогда не знаю где и что ковырять... нужно всё распечатывать и проверять новости, мне сейчас эксперементировать некогда. Цитата Ссылка на сообщение Поделиться на других сайтах
Luci 0 Опубликовано: 6 октября 2010 Рассказать Опубликовано: 6 октября 2010 Всё остаётся без измененийя так понимаю что проблема здесь не в шаблона и т.д. а в методе выбора из бд вот этой конструкцией {custom category="2,7" template="custom" aviable="global" from="0" limit="10" cache="yes"} выбор из бд происходит напрямую и не обрабатывается этим хаком Может кто подскажет решение? Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.