Задать вопрос
  • Как создать виджет сообщества в vk?

    @Gesparo Автор вопроса
    Fullstack разработчик
    Итак, задачу все же удалось решить. Опишу способ решения этой задачи для тех, кто подписался и для тех, кто столкнется с аналогичной задачей.

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

    Iframe приложение должно "смотреть" на страницу где будет вот такой вот код:
    index.html:
    <!doctype html>
    <html lang="ru">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    
        <!-- Подключаем jquery -->
        <script src="https://code.jquery.com/jquery-1.12.4.min.js" defer></script>
        <!-- Подключаем VK -->
        <script src="https://vk.com/js/api/xd_connection.js?2"  type="text/javascript" defer></script>	
    	
        <!-- Подключаем скрипт регулировки высоты -->
        <script src="/vk_height.js" defer></script>
    	
    </head>
    <body style='text-align:center;padding-top:50px;' id='body'>
    	<a href="javascript:void(0)" id="set-permission">Создать ключ доступа к виждету сообщества</a>
    	<br>
    	<br>
    	<a href="javascript:void(0)" id="set-widget">Добавить виждет в сообщество</a>
    </body>
    </html>


    vk_height.js:
    // инициализация вк
    VK.init(, function() { 
         console.log('Init successful');
      }, function() { 
         console.log('Error init');
    }, '5.73'); 
    
    // функция дня изменения размера окна в зависимости от содержимого страницы
    function autosize(width) {
        //Проверяем элемент body на наличие.
        if (!document.getElementById('body')) {
            alert('error');
            return;
        }
        // Успешно ли подключен ВК скрипт
        if (typeof VK.callMethod != 'undefined') {
            /*
            Вызываем функцию vk js api для управления окном.
            VK.callMethod('функция', параметры)
            В данном случае у нас - VK.callMethod('изменение_размеров_окна', ширина, высота);
            Так же добавляем еще 60 пикселей что бы было небольшое расстояние.
            */
            VK.callMethod('resizeWindow', 840, document.getElementById('body').clientHeight + 60);
        } else {
            alert('error #2');
        }
    }
    
    $(document).ready( function(){
        //Вызываем функцию регулировки высоты каждые пол секунды.
        setInterval('autosize(607)', 500); 
    	
    	$('#set-permission').on('click', function(e) {
    		e.preventDefault();
    		
    		// запрос прав доступа для дальнейшего обновления данных посредством крона
    		// после запрса создается ключ, который можно посмотреть на странице управления сообществом
    		// его и нунжно будет применить для обновления данных в виджете через сервер
    		// дока прав тут https://vk.com/dev/permissions
    		// дока метода тут https://vk.com/dev/clientapi?f=3.+showGroupSettingsBox
    		VK.callMethod("showGroupSettingsBox", 64);
    	});
    	
    	$('#set-widget').on('click', function(e) {
    		e.preventDefault();
    		
    		// запрос установки виджета
    		// типы виджетов можно глянуть тут https://vk.com/dev/objects/appWidget
    		// как подключить виджет можно глянуть тут https://vk.com/dev/apps_widgets
    		VK.callMethod('showAppWidgetPreviewBox', 'text', 'return {' + 
    			'"title": "Цитата",' + 
    			'"text": "Текст цитаты"' + 
    		'};');
    		
    		// типы событий, генерируемых после выполнения запроса на установку виджета можно глянуть тут https://vk.com/dev/apps_widgets
    		// работа с событиями вк https://vk.com/dev/Javascript_SDK?f=4.1.+VK.addCallback
    		VK.addCallback('onAppWidgetPreviewSuccess', function f(data){ 
    			alert("Виджет успешно добавлен"); 
    		});
    	});	
    	
    });


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

    Серверную часть я полностью описывать не буду и покажу только само тело запроса, главное запросить данные через culr по ссылке https://api.vk.com/method/ (Вот гайд)

    Сам запрос:
    $api = new \App\Api\Main\Vk(['access_token' => 'ключ_корый_мы_сгенерировали_первой_кнопкой']);
        $api->request(
            'appWidgets.update',
            [
                'type' => 'list',
                'code' => '
                    var users = API.users.get({"user_ids": [11111, 22222, 33333]});
                    
                    return { 
                      "title": "Конкурс за призы", 
                      "rows": [
                                  { 
                                      "title": users[0].first_name + " " + users[0].last_name, 
                                      "icon_id": "id11111",
                                      "descr" : "1 место - 2000 баллов",
                                      "button" : "Результаты конкурса",
                                      "button_url" : "https://vk.com/link"
                                  },
                                  { 
                                      "title": users[1].first_name + " " + users[1].last_name, 
                                      "icon_id": "id2222",
                                      "descr" : "2 место - 1890 баллов",
                                      "button" : "Правила и призы",
                                      "button_url" : "https://vk.com/link"
                                  },
                                  { 
                                      "title": users[2].first_name + " " + users[2].last_name, 
                                      "icon_id": "id22222",
                                      "descr" : "3 место - 1890 баллов",
                                      "button" : "Хочу на марафон",
                                      "button_url" : "https://vk.com/link"
                                  }
                             ]
                };'
            ]
        );


    Подробности о теле запроса можно узнать тут
    А как его правильно писать - тут

    Вышенаписанный php код можно добавить в крон, автоматизировать и наслаждаться жизнью. И на последок - вот пример рабочего кода в сообществе (сорян за стили, и некоторые замазанные части, мне лень было делать нормальный скрин):
    5a9e7f04c5275110898228.png
    Ответ написан
    5 комментариев
  • Как построить sql запрос сортировки по двум полям?

    He11ion
    @He11ion
    PHP-monkey
    Экстра-наркоманский вопрос какой-то.

    SELECT * FROM tablename ORDER BY rating DESC, countReview DESC

    Выведет club4 -> club3 -> club1 т.к. рейтинг 4го самый высокий, а ревью у 3го > 1го.
    Ответ написан
    Комментировать
  • Как написать masonry сетку без сторонних плагинов?

    Evanre
    @Evanre
    Front-end developer
    Если не подходят колонки, то выводите посты в 3 разных блока. Выставляете эти блоки в ряд. Все. (если нет возможности вывести блоки нужным порядком и в контейнерах, есть простенький легковесный плагин salvattore, который сделает это за вас).

    Если нужен подход как у оригинального плагина от desandro. Самостоятельно писать смысла нет. Слишком долго + требует значительных знаний js. Есть более легковесные варианты:
    Shuffle и quicksand. Они помимо самой сетки еще умеют сортировать\фильтровать элементы (как Isotope).
    Ответ написан
    Комментировать
  • База данных городов, стран и регионов без дубликатов на английском?

    sokolnikov
    @sokolnikov
    https://github.com/x88/i18nGeoNamesDB

    Содержит

    234 страны
    3 721 регион
    2 246 813 населенных пункта

    Названия переведены на

    Русский, Украинский, Белорусский, Английский, Испанский, Португальский, Немецкий, Французский, Итальянский, Польский, Японский, Литовский, Латышский, Чешский

    Кодировка - utf8
    Ответ написан
    1 комментарий
  • Как победить ошибку?

    copist
    @copist
    Empower people to give
    Посмотри лог ошибок на сервере - скорее всего была ошибка (исключение), которое в результате было отображено в формате HTML, а не JS или JSON

    Посмотри панель "Network" в Google Chrome - там возможно будет запись с кодом 4xx или 5xx - это ошибка
    5737225ce9db431faf67c054f2d2fffa.png

    И посмотри на текст ответа - там может быть HTML вместо JS
    ed296226618d458ba43dadaa33f29481.png
    Ответ написан
    Комментировать
  • Есть ли способ взаимодействовать с vk api не создавая приложение?

    angrySCV
    @angrySCV
    machine learning, programming, startuping
    хехехе, вам не нужно своё приложение, всё что вам нужно это ключ, для доступа, а этот ключ можно получить и от лица любого приложения, при желании)))))
    Ответ написан
    3 комментария
  • Как реализовать тень как у логотипа харба на CSS?

    zualex
    @zualex
    Senior Software Engineer
    я обычно пользуюсь генератором длинных теней
    Ответ написан
    Комментировать
  • Насколько эффективно знать языки программирования ?

    opium
    @opium
    Просто люблю качественно работать
    очень эффективно , куча денег, слава, женщины.
    Ответ написан
    Комментировать
  • Как правильно отказать кандидату после собеседования?

    ncix
    @ncix
    Предприниматель
    Я обычно после высылки кандидатом тестового задания отвечал развернуто вот дескать тут, тут и тут всё печально. Но вы, мол, не расстраивайтесь, подтяните это, это и это и, если будет снова вакансия, мы вас будем иметь ввиду. И в таком духе.

    Процентов 30 отвечает «ОК», еще 30 молчит, а остальные возмущаются в таком духе мол «кто вы такие чтоб я тут для вас еще старался хорошо тест писать». На такие ответы всегда чувствую что правильно отказал :)
    Ответ написан
    5 комментариев