Элементарные социальные share-кнопки

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

HTML

<a onclick="Share.vkontakte('URL','TITLE','IMG_PATH','DESC')"> {шарь меня полностью}</a>
<a onclick="Share.facebook('URL','TITLE','IMG_PATH','DESC')"> {шарь меня полностью}</a>
<a onclick="Share.mailru('URL','TITLE','IMG_PATH','DESC')"> {шарь меня полностью}</a>
<a onclick="Share.odnoklassniki('URL','DESC')"> {шарь меня полностью}</a>
<a onclick="Share.twitter('URL','TITLE')"> {шарь меня полностью}</a>

JS

Читать далее

VK API и access token

Не совсем понятно почему, но VK ввели ограничение на получение данных с публичных методов вроде wall.get и т.п.

В случае, если, к примеру, делаем запрос на получение контента стены какой-нибудь группы вк (corporationofhumor)

$url = 'https://api.vk.com/api.php?oauth=1&method=wall.get&domain=corporationofhumor&count=100';
$wall = json_decode(file_get_contents($url));
print_r( $wall );

получаем

stdClass Object
(
    [error] => stdClass Object
        (
            [error_code] => 8
            [error_msg] => Invalid request: method is unavailable without access token
            [request_params] => Array
                (
                    [0] => stdClass Object
                        (
                            [key] => oauth
                            [value] => 1
                        )

                    [1] => stdClass Object
                        (
                            [key] => method
                            [value] => wall.get
                        )

                    [2] => stdClass Object
                        (
                            [key] => domain
                            [value] => sarsar
                        )

                    [3] => stdClass Object
                        (
                            [key] => count
                            [value] => 100
                        )

                )

        )

)

Я лично решил проблему так: зарегал приложение в VK и скопировал сервисный ключ:

Читать далее

Как распаковать многотомный архив Битрикс

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

К примеру у нас архив состоит из двух файлов:

2016-05-04.16-13-32.88sr3bcx.tar.gz
2016-05-04.16-13-32.88sr3bcx.tar.gz.1

Переименовываем их в:

2016-05-04.16-13-32.88sr3bcx.tar.gz.001
2016-05-04.16-13-32.88sr3bcx.tar.gz.002

И можно распаковывать. После распаковки мы получим целый файл архива с расширением tar. Распаковываем его и вот они наши файлы.

Как сделать Update пользователя в обработчике OnAfterUserUpdate без зацикливания.

В обычной ситуации при вызове функции Update класса CUser в обработчике OnAfterUserUpdate приведёт к повторному вызову OnAfterUserUpdate и так по кругу. Таким образом получается замкнутый цикл и скрипт начинает вызывать сам себя бесконечное число раз.

Как же выйти из этой ситуации?

Вариант 1:

А вот как:

В init.php вызываем обработчик:

AddEventHandler("main", "OnAfterUserUpdate", array("CUserHandler", "OnAfterUserUpdateHandler"));

А вот в самом классе CUserHandler делаем такую хитрость:

class CUserHandler
{
	public static $disableHandler = false;
	public static $element_id = '';
	
	function OnAfterUserUpdateHandler(&$arFields){
		if ((self::$disableHandler)&&($arFields['ID']==self::$element_id)){
			return;
		}
		
		self::$disableHandler = true;
		self::$element_id = $arFields['ID'];
		
		//ниже вызываем Update юзера
		//...
	}
}

Смысл в том, что при первом вызове OnAfterUserUpdateHandler всё, что ниже условия проверки значений $disableHandler и $element_id выполняется, а при последующих вызовах — нет.

Вариант 2:

Обновлять св-во по ссылке (т.к. на вход функции подаётся &$arFields )

Полезности о input -ах типа file в Битрикс

Обычно народ просто ставит

<input type="file" name="file" value="файлег">

Но это не по нашему! Выглядит стандартно, да и нет никакой валидации по типу файла, если мы, к примеру, хотим загружать только файлы определённого типа.

Итак, для начала давайте подумаем, что мы хотим:

  1. Реализовать в форме input типа file, принимающий только картинки
  2. Около input -а должна быть надпись с названием файла, который мы будем загружать после выбора оного в диалоговом окне
  3. Файл-картинку из этого input-а нужно загружать в инфоблок
  4. Предусмотреть обработку ошибки, когда физический размер картинки больше установленного в php.ini

Давайте для начала реализуем пункт 2.

Как это должно выглядеть в идеале:

Joxi

Пример вёрстки: ТЫК

Листинг кода:

Читать далее