Хак: меняем на картинку кнопку Добавить в друзья

Был у меня клиент, которому не нравилось то, что кнопки “Добавить в друзья/Отменить дружбу/Дружба запрошена” выглядят в виде текстовых кнопок. В общем, сайт у него был в зеленых тонах, и мне пришлось создавать простенькие кнопки-рисунки (+), (-) и (√), которые имеют соответствующие значения.

Но теперь вопрос – как заменить существующий текст на нужные нам рисунки без правки ядра? В шаблоне ведь только функция указывается, которая алиасом другой является и так далее  уровнем вложенности равным 4. Пришлось все выполнять через фильтры.

Скачайте конечный результат (в архиве 3 рисунка + php файл, в котором весь код находится):

Извините, этот файл сильно устарел и больше нет возможности его скачать.

Теперь разберем код:

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

Второй блок – функция ds_member_add_friend_image – непосредственно делает замену на рисунок, причем в строгой зависимости от типа кнопки. Будьте внимательны, тут вам придется указать путь, по которому скрипт сможет найти рисунки.

Третий блок – функция ds_button_friends_image – даем нам возможность вернуть поддержку ajax действий. Мы вырезаем весь окружающий кнопку div, а потом вставляет только необходимый, чтобы избавить от ненужных стилей.

И вот что получилось в конечном итоге:

BuddyPress friends button image

Для того, чтобы у вас заработал данный код, достаточно просто скопировать содержимое php-файла (без тегов <?php и ?>) в functions.php вашего шаблона.


Я поставил XCache у себя на vds. Радует то, что полностью пропали ошибки 50х. Только изредка по непонятной для меня причине вываливается 404, которая исчезает сразу после перезагрузки страницы. Так же сделал gzip всей статики на стороне nginx (удивительно, как я этого еще раньше не сделал – я объявил в nginx.conf поддержку сжатия, но не указал, что именно сжимать). На мой взгляд (при моем канале доступа в инет 20Mb/s) сайт теперь летает. Заметен только холодный старт, но это уже надо в очень глубоких настройках ковыряться.

комментариев 12

  1. Kaizer:

    А как его прикрутить к сайту ?

    • Блин, точно! Забыл написать :) Исправил, спасибо за замечание.

    • Oboramanitka:

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

  2. Jettochkin:

    хорошее решение) вообще надо создать мега плагин – который перелопатит все что только можно на подобный манер (однако хочется чтоб как у людей было – как в больших соц-сетях!)

    По поводу nginx, xCache – ну его.. лучше получается с APC.. стабильнее и результативнее (на одном хорошо загруженном сервере обкатывал и то и другое – запал на APC ;) )

  3. Koshnv:

    Йех, жил припеваючи и на халяву на сервере своего друга. За оптимизацию не думал)))
    теперь вот переезжаю на свой VDS, так что благодарю за мануалы!
    Пока не где не встречал комплексного подхода, и так сказать настройки от и до с систематизацией.

  4. James:

    работает отлично!

    кто-нибудь пытался сделать нечто подобное с плагином “bp followers”?

    как я понимаю, кнопок всего 2 и прописаны они в bp-follow-hooks.php, строка 86, но что-то у меня никак не получается вклинить туда свои картинки.

    Спасибо!

  5. James:

    столкнулся со странным поведением вашего хака. если в поиске директории пользователей ввести имя и нажать кнопку “поиск”, хак срабатывает. А вот если повторить тот же манёвр и нажать enter, появится не картинка, а кнопка по умолчанию. ВР 1.5.1

    спасибо!

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *