Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Хаки Выбор количества выводимых новостей пользователем

Выбор количества выводимых новостей пользователем


     01.07.2012    Хаки    3051

вопрос
Задача - сделать возможность выбора пользователем количество выводимых новостей в категории.

Решил что лучший вариант реализации - изменение переменной отвечающей за количество выводимых новостей с помощью HTML формы. Посмотрел переменную "Количество новостей на страницу" в поле ввода админки ДЛЕ (news_number). Но мои манипуляции с переменной в engine.php и show.short.php не принесли результата, DLE продолжает выводить то количество новостей что указано в админке, питался задавать ее прямо в файлах, но меняется только количество страниц навигации.

Ребят подскажите в чем проблема, может я ошибся переменной или не там ищу?

Ответил: ExOmRa


Комментарии пользователей (32)

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 8 июля 2012 22:04 - Админ

ТС пошёл в баню париться.
Я стерпел один наезд, второго терпеть не собираюсь.

Каков вопрос - таков и ответ. Просто помните об этом.

nowheremany
192

1659 | 1292

nowheremany - 8 июля 2012 23:01 - Эксперт

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

Благодарность принимаю тут Связь

ExOmRa2
3 | 3

ExOmRa2 - 9 июля 2012 02:42 - Юзер

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

Уважаемый администратор. если вы когда-нибудь делали на заказ сайт, и у вас горел проект, и вы обращались за помощью к другим людям, а вам вместо внятного ответа или вопросов несут всякую ахинею типа: "зачем это нужно", "а если бы дизайнер нарисовал вам пригнуть с криши", о правописании.......... я спокойно пишу на 3ех языках и русский не мой родной язык, я не считаю зазорным сделать в ошибку в одном слове, но я считаю плохим тоном учить языку в данной тематике вопроса, если мне нужно будет обучение русскому языку я обращусь на сайты соответствующей тематики.

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

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 9 июля 2012 07:16 - Админ

Цитата: ExOmRa2
Уважаемый администратор. если вы когда-нибудь делали на заказ сайт, и у вас горел проект, и вы обращались за помощью к другим людям, а вам вместо внятного ответа или вопросов несут всякую ахинею типа: "зачем это нужно", "а если бы дизайнер нарисовал вам пригнуть с криши", о правописании..........

Во первых - когда горит проект, да и вообще когда возникают сложности реализации чего-либо - я обращаюсь только за платной помощью, т.к. это единственно верный выход.
Во вторых - не нужно называть админа толлем, причем необоснованно - и про правила русского языка никто не напомнил бы))) И мне совершенно наплевать на то, что вы свободно пишите на русском, украинском и ещё одном языке - это не достижение. любой человек может писать на 100 языках, спасибо гугл-переводчику. Если вы до сих пор не осознали причину своего геморроя с этим проектом - мне вас жаль.
Цитата: ExOmRa2
Если у вас есть уважение к чужому труду, то удалите не только мои и свои комментарии а и всю эту тему, я не хочу чтобы мое решение задачи было на этом сайте, где так наплевательски относятся к людям, есть много других сайтов где я уже разместил это решение, и где люди которым оно нужно найдут его.

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

Каков вопрос - таков и ответ. Просто помните об этом.

ExOmRa2
3 | 3

ExOmRa2 - 9 июля 2012 03:17 - Юзер

Цитата: nowheremany
Если новостей много, то атаковать сайт, без проблем


А у тебя есть лучшее решение? За все время ты не смог и строчки кода написать. Опиши ка мне что же ты там будеш "атаковать" =)).

nowheremany
192

1659 | 1292

nowheremany - 9 июля 2012 09:52 - Эксперт

Причем тут решение? Идея погибельна

Благодарность принимаю тут Связь

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 9 июля 2012 09:54 - Админ

человек неадекватен, и решение такое же.

Каков вопрос - таков и ответ. Просто помните об этом.

ExOmRa2
3 | 3

ExOmRa2 - 9 июля 2012 08:24 - Юзер

Цитата: ПафНутиЙ
Во первых - когда горит проект, да и вообще когда возникают Сложности реализации чего-либо - я обращаюсь только за платной помощью, т.к. это единственно верный выход.


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

Цитата: ПафНутиЙ
Во вторых - не нужно называть админа толлем, причем необоснованно - и про правила русского языка никто не напомнил бы)))


Ну та что же вы зря устроили урок русского языка, неужели сложно было сказать в чем проблема, или вы считаете что говорить в НЕ тему это правильно? Насколько помню, тролль человек что говорит не в тему, - и я по вашему был не прав что назвал вас троллем? Пишите по теме, не пишите глупостей, и все будет хорошо. И кстати тролль пишется с "р"

Цитата: ПафНутиЙ
это не достижение. любой человек может писать на 100 языках, спасибо гугл-переводчику


Да неужели Вы им хоть раз пытались им пользоваться проффесионально????? - Его перевод крив и ужасен.

Цитата: ПафНутиЙ
Если вы до сих пор не осознали причину своего геморроя с этим проектом - мне вас жаль.


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

Цитата: ПафНутиЙ
У меня есть уважение к чужому труду и именно по этой причине я не удалю вопрос и ответ на него.


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

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 9 июля 2012 09:43 - Админ

Последний раз повторяю. Я в первом своём комментарии объяснил вам вашу проблему.
Нужно сначала думать (но судя по всему думать вам некогда), а потом делать.
Если что-то не нравится - #давайдосвиданья
И ещё раз повторюсь мне параллельны все ваши жалкие потуги и попытки полить грязью это сайт и администрацию. Есть куча людей, которым этот сайт помог, а ваши говно-излияния пойдут только на пользу сайту.

Цитата: ExOmRa2
Вопрос мой, ответ тоже мой, все комменты вы удалили, больше похоже что вас жаба за чужой хак душит.

Я делаю много чего бесплатно, и качественно, за что вы и подобные вам неадекваши берут деньги, причём, судя по скринам того "макета", делаете это не низком уровне.
Так что жаба скорее душит, причём давно, именно вас, раз не можете себе позволить заказать написание нормального хака у нормального программиста.
А удалил я комментарии потому что посчитал так нужным. Все же выносят мусор из дома?

Каков вопрос - таков и ответ. Просто помните об этом.

ExOmRa3
1 | 1

ExOmRa3 - 9 июля 2012 18:27 - Юзер

Администратор, что за детский садик с баном по IP адресу =), уж вы то должны знать что это не помогает, или не знаете, а всю жизнь то и делаете что нанимаете кого то? Что вы будете делать, банить каждую подсеть и IP с которого я буду заходить на сайт?

Нанять программиста? Ради того чтобы он только сказал что я искал не в том файле, у вас явно высокий уровень знаний с таким подходом, но очевидно что высокое умение троллить и писать бред, жаль что никто не увидит ваши комменты, стыдно стало?

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

Цитата: ПафНутиЙ
Я делаю много чего бесплатно, и качественно, за что вы и подобные вам неадекваши берут деньги,


Типо того что я написал, я вижу что вы только и умеете воровать.

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

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 9 июля 2012 20:49 - Админ

поплачь ещё. ))))
А лучше научись сначала верстать.
Я конечно могу ошибаться, но если это ты, мне действительно жаль тех людей, которые с тобой работали и не зная писали положительные отзывы.
57 ошибок на странице из 525 строк это ппц.
Чистый и аккуратный код.
На таблицах инлайн стилях и инлайн скриптах особенно аккуратен, браво - обманутые в надеждах заказчики рукоплещут!
Подозреваю, что и этот заказ окажется таким же, только ещё с потенциальной дыркой в движке.
В общем давай, жги ещё. Регистрируйся на сайте, иши, поднимай количество просмотров новости))))

Каков вопрос - таков и ответ. Просто помните об этом.

ExOmRa4
1 | 1

ExOmRa4 - 9 июля 2012 22:00 - Юзер

Блин, знал же что найдеш =).

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

Ладно ПафНутиЙ, ты победил =), но дай наконец то ответ на вопрос по чему ты не удаляеш этот хак.

В любом случае это было интересно, удачи.

Sander
1125

1637 | 1204

Sander - 9 июля 2012 22:33 - Эксперт

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

SanDev.pro - мой блог.

ICQ: 404-037-556
Skype: Sander8804

ExOmRa5
2 | 2

ExOmRa5 - 9 июля 2012 23:06 - Юзер

Прочел статью:
1. Передача, символов исключена, так как используется <select> с предварительно заданными значениями, это описано в хаке. В своем блоге эту часть вы не описали.
2. "Если у категории не задано индивидуальное количество новостей, код работать не будет" - тут согласен, об этом стоит указать
3. "POST переменные существуют только по факту отправки формы Т.е. пройдя по навигации на любую другую страницу это число не будет отправлено и посетителю надо снова вручную указывать желаемое количество новостей на страницу" - так и было задумано.
4. "Смотрим далее, он вставил код позволяющий обрабатывать PHP код в файле шаблона" - да тут вы правы, но сайт "статичен", в нем нет ни формы обратной связи ни возможности вводить или оправлять любые данные посетителем. Я не буду спорить и если я тут не прав тогда просто скажите. Если возможность в данном случае получить акк. админа?

Рад что хоть кто то начал общаться по делу, я не говорю что хак безупречен, мне дали бан сразу после публикации и никто ничего подобного не писал. Хоть статья это скорее критика меня, но все равно спасибо, что указали мои ошибки.

Sander
1125

1637 | 1204

Sander - 9 июля 2012 23:11 - Эксперт

1. отредактировать html код сможет любой продвинутый пользователь. Задача разработчика исключить любую (!) вероятно вывод системной ошибки, чтобы злоумышленник даже не мог увидеть путь/адрес файлов
3. Крайне сомнительное удобство для пользователей...

SanDev.pro - мой блог.

ICQ: 404-037-556
Skype: Sander8804

ExOmRa5
2 | 2

ExOmRa5 - 9 июля 2012 23:23 - Юзер

1. Тогда просьба админу отредактировать хак или указать про этот недостаток, нехочу чтобы кто пострадал изза этого, мало кто читает коменты а я уже не имею такой возможности, но в любом случае, поймите правильно вырывать кусок из всего кода, и критиковать его, не совсем корректно.
3. У меня только одна страница небольшим (до 12) количеством кратких новостей, и у меня нет пользователей, только посетители. "Тест" показал что это достатчно удобно в моем случае.
4. А что по поводу этого пунтка? Если у пользвателя нет возможности отсылать или писать информацию на сайте, есть ли угроза безпосности?

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 9 июля 2012 23:47 - Админ

Цитата: ExOmRa5
У меня только одна страница небольшим (до 12) количеством кратких новостей, и у меня нет пользователей, только посетители. "Тест" показал что это достатчно удобно в моем случае.

СТОП! одна страница?
тогда можно реализовать а том же jquery
определяем количество элементов на странице. Отсчитываем нужное (можно устанавливать через куки, а в случаи отсутствия таковых брать дефолтное значение - 2 элемента) и скрываем в display:none лишнее. лбо прикручиваем вот это и задаём фиксированные размеры новостям.

Каков вопрос - таков и ответ. Просто помните об этом.

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 9 июля 2012 23:38 - Админ

Цитата: ExOmRa4
Ладно ПафНутиЙ, ты победил =),

Тут не соревнования, поэтому победивших нет. А вот то, что наконец разговор принимает нормальный оборот, могу только порадоваться)
Вопрос не удалял, потому что сначала не увидел ответ, потом из пинципы, потом просто угарал)
Sander,
Да, статья в комментарий не влезла бы).
Цитата: ExOmRa
мне дали бан сразу после публикации и никто ничего подобного не писал.
Причину бана я уже высказал, равно как и своё мнение по поводу того, как следовало поступить в сложившейся ситуации, просто не стал объяснять, что даже неоднократно согласованное ТЗ может, превратившись в готовый сайт, противоречить самому себе. Например заказчику не понравится кнопка выбора количества новостей на сайте и он скажет - а давайте ка её уберём. (это как пример).

Совсем недавно я три раза переделывал структуру инфоблока (на биртиксе) просто потому, что на деле оказалось, что тётенька-кадровичка не может охватить и удержать в уме 14 дополнительных полей, предварительно расписанных менеждером, утверждённых в ТЗ директором и воплощённых дизайнером и мною в жизнь на сайте. Да, за дополнительные работы, было дополнительно проплачено. Но суть в том, что если бы при составлении ТЗ спросили бы эту тётеньку-кадровичку как лучше и удобнее для неё сделать заполнение раздела сайта - этих проблем и доп. расходов не было бы.

Каков вопрос - таков и ответ. Просто помните об этом.

ExOmRa6
1 | 1

ExOmRa6 - 10 июля 2012 03:15 - Юзер

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

А на счет переделки оч. часто такое бывает... а вернее почти всегда, дизайнер нарисует одно а потом заказчик говорит убери то то и то, добавь такое и такое, часто просто опускаются руки ведь иногда на мелочь (на глаза заказчика) уходит уйма времени а тут тебе говорят, - убери это, и становится просто все равно, и делаешь лишь бы так что бы работало. Но я придерживаюсь принципа что нужно сделать то что сказано.... и, я уверен что возможно сделать все и, все возможно, только как правило не хватает ресурсов, времени и опыта.

Всем спасибо за ответы.

nowheremany
192

1659 | 1292

nowheremany - 10 июля 2012 10:12 - Эксперт

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

Благодарность принимаю тут Связь

ExOmRa
5 | 5

ExOmRa - 15 июля 2012 16:56 - Юзер

Цитата: nowheremany
нормальные программеры сначала спрашивают зачем это нужно, после объяснения могут предложить другой вариант

Понятно. ПафНутиЙ, nowheremany извините ребят был не прав, я счел ваши вопросы и комментарии за издевательство а не попытку разобраться или помочь мне.

Теперь к делу.
Для работы текущего хака кроме самой библиотеки jQuery понадобится плагин к нему jquery cookie (скачать можно тут). Кроме того нужно установить минимальное количество показа для вашей категории, можно использовать єтот хак для разных категорий, но варианты выбора количества новостей в форме шаблона должны совпадать.

Итак, в engine.php вместо:
if ($cat_info[$category_id]['news_number']) $config['news_number'] = $cat_info[$category_id]['news_number'];


Вставляем:

if (isset($_POST['news_number'])){
    SetCookie("c_news", $_POST['news_number']);
    if ($cat_info[$category_id]['news_number']) $config['news_number'] = $_POST['news_number'];
}
else if (isset($_COOKIE['c_news'])){
    if ($cat_info[$category_id]['news_number']) $config['news_number'] = $_COOKIE['c_news'];
}
else{
    if ($cat_info[$category_id]['news_number']) $config['news_number'] = $cat_info[$category_id]['news_number'];
    SetCookie ("c_news", $cat_info[$category_id]['news_number']);
}    


В main.tpl вашего шаблона в нужном месте вставляем:

<form id="formus" method="post" action="">
<select id="selt" name="news_number">
    <option value="2">2</option>
    <option value="4">4</option>
    <option value="6">6</option>
    <option value="8">8</option>
    <option value="10">10</option>
    <option value="10000">Все</option>
</select>
</form>

В конце main.tpl вставляем:
<script language="javascript">
    $("#selt").on("change", function() {
        $("#formus").submit();
    });
        var $alfa = $.cookie('c_news');
        $('#selt > option').each(function(){
            if ($alfa == $(this).val()) $(this).attr('selected','selected');
        });
</script>

ExOmRa
5 | 5

ExOmRa - 15 июля 2012 17:41 - Юзер

Цитата: ExOmRa
выбора количества новостей в форме шаблона должны совпадать

не успел поправить, - "Но можно написать вторую форму для другой категории и использовать для нее другие варианты"

nowheremany
192

1659 | 1292

nowheremany - 15 июля 2012 19:58 - Эксперт

1. Зачем плагин для кук?

else{
    if ($cat_info[$category_id]['news_number']) $config['news_number'] = $cat_info[$category_id]['news_number'];
    SetCookie ("c_news", $cat_info[$category_id]['news_number']);
}  

это зачем?

сандер уже говорил - надо фильтровать данные

Благодарность принимаю тут Связь

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 15 июля 2012 20:49 - Админ

Цитата: ExOmRa
Понятно. ПафНутиЙ, nowheremany извините ребят был не прав, я счел ваши вопросы и комментарии за издевательство а не попытку разобраться или помочь мне.

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

Каков вопрос - таков и ответ. Просто помните об этом.

ExOmRa
5 | 5

ExOmRa - 15 июля 2012 20:51 - Юзер

Сандер писал что нужно фильтровать данные чтобы не было ошибки БД если отослать не число а другой символ.

Мне фильтрация не нужна, на обработку передается только число за счет использования тега <select>, и я не вижу смысла в фильтрации ибо не понимаю зачем кому то менять <select> на <input>.

А необходимость кук:
Jquery с кук подбирает число и нужному тегу <option> с аналогичным значением value присваивает атрибут selected. Если этого не делать тогда выбранным количеством новостей на странице всегда будет отображено первое значение, то есть в моем примере это всегда будет значение "2".

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

Сам вес плагина (если убрать комменты с кода) 1.3 Кб, можно сделать еще меньше.

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 16 июля 2012 08:32 - Админ

Открываем Dragonfly в Опере, меняем <option> на <input> и вызываем ошибку БД - это самый простой вариант.

Каков вопрос - таков и ответ. Просто помните об этом.

nowheremany
192

1659 | 1292

nowheremany - 16 июля 2012 09:46 - Эксперт

попробуйте отправить такое '1; SELECT * FROM dle_users''

Благодарность принимаю тут Связь

ExOmRa
5 | 5

ExOmRa - 16 июля 2012 23:17 - Юзер

Не знал про такую хитрость =).
nowheremany не получилось отправить запрос через форму в БД, выдает ошибку, хотя оч. хотелось посмотреть выдаст ли список пользователей.
Тогда просто добавляем функцию валидации данных по типу переменной, тогда в engine.php будет:

if (isset($_POST['news_number'])){
    if (filter_var($_POST['news_number'], FILTER_VALIDATE_INT)){
        SetCookie("c_news", $_POST['news_number']);
        if ($cat_info[$category_id]['news_number']) $config['news_number'] = $_POST['news_number'];
    } else die ("Брысь отсюда...");
}
else if (isset($_COOKIE['c_news'])){
    if ($cat_info[$category_id]['news_number']) $config['news_number'] = $_COOKIE['c_news'];
}
else{
    if ($cat_info[$category_id]['news_number']) $config['news_number'] = $cat_info[$category_id]['news_number'];
    SetCookie ("c_news", $cat_info[$category_id]['news_number']);
}    


nowheremany
192

1659 | 1292

nowheremany - 17 июля 2012 00:00 - Эксперт

зачем заморачиваться? велосипеды свои не стройте
$_POST['news_number'] = (isset($_POST['news_number'])?intval($_POST['news_number']):10);

Благодарность принимаю тут Связь

ExOmRa
5 | 5

ExOmRa - 17 июля 2012 23:31 - Юзер

Ок, спасибо, правда использовал только функцию из приведенного вами кода.

Как я могу изменить свой ответ на вопрос, или просто стоит написать весь хак еще раз в комментах?

nowheremany
192

1659 | 1292

nowheremany - 18 июля 2012 09:52 - Эксперт

В комент напиши

Благодарность принимаю тут Связь

terraflo
2 | 2

terraflo - 25 декабря 2012 22:38 - Юзер

так где же заключительный вариант?:)

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы