• Как из массива сделать список?

    usdglander
    @usdglander Куратор тега PHP
    Yipee-ki-yay
    $tags = implode(',', array_map(function($tag) { return $tag->name; }, get_the_tags()));
    Ответ написан
    1 комментарий
  • Как сверстать такие блоки?

    SmthTo
    @SmthTo Куратор тега CSS
    Все перепёлки мира будут оплакивать мою смерть.
    Ответ написан
    Комментировать
  • Из input'a в google sheets?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    но не понятно как реализовано

    Что именно не понятно? Там же даже примеры есть. Надо отправить put запрос с данными в json формате

    Как из своей html страницы с input'ами перенести данные в google sheets?

    Отправить форму себе на сервер, там обработать сделать валидный json из пришедших данным и cUrl-ом отправить.
    Или перехватить отправку формы в js, там обработать данные формы сформировать валидный json и отправить.
    Ответ написан
    Комментировать
  • Выбор слайдера?

    @Lord_Dantes
    Все что вы указали можно изменять вручную в коде практически в каждом адекватном слайдере.
    Я вам предложу owl.carousel.
    Ответ написан
    Комментировать
  • Как вывести массив с миниатюрами wordpress?

    Как-то так:
    <?php
    $args = array(
    		'post_type' => 'post',
    		'posts_per_page' => 5,
        'orderby' => 'modified',
    );
    
    $custom_query = new WP_Query( $args );
    
    while ( $custom_query->have_posts() ) {
    	$custom_query->the_post();
    	echo '<a href="'. get_permalink() .'">' . get_the_title() .'</a>'; 
    }
    wp_reset_postdata();
    ?>
    Ответ написан
    6 комментариев
  • Как скрыть подкласс в li class только с помощью css?

    djQuery
    @djQuery
    "Кодируем помаленьку" ("Сказка о Тройке")))
    Вместо класса указан id. Пропущена точка (указание на класс:

    .first-s .abvgd li:nth-child(2) {display: none;}

    Проще так:

    li a[href='link2']{display:none;}
    Ответ написан
    Комментировать
  • Зачем нужен HTML если есть WordPress?

    а еще есть конструкторы сайтов, вроде wix, там даже чайник сделает сайт, и вордпресс не нужен, и HTML со всеми приблудами, только мышкой орудуй и все.
    Ответ написан
    Комментировать
  • Зачем нужен HTML если есть WordPress?

    Stalker_RED
    @Stalker_RED
    Представим вместо вас новичка автомеханика:

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

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

    Посмотри на яндекс-маркет или на гуглокарты. Посмотри на вконтактик или на тостер, на котором ты этот вопрос задал. Сможешь повторить это на вордпрессе? Вот затем и учат, чтобы уметь делать что-то отличающееся от блогов на вордпрессе.
    Ответ написан
    2 комментария
  • Как проверить прошло ли 24 часа в php?

    Snickersmix
    @Snickersmix
    Web-разработчик
    if( time() - strtotime($date_added) >= 24*60*60 ){
    //то выполняем скрипт
    } else {
    //Если 24 часа ещё не прошло то ничего не выполняем
    }
    Ответ написан
    Комментировать
  • Разумно ли использовать следующее рег. выражение для пароля?

    saboteur_kiev
    @saboteur_kiev Куратор тега Веб-разработка
    software engineer
    Взято с рекомендаций разработчиков мозиллы (https://developer.mozilla.org/en-US/docs/Web/JavaS...)

    function escapeRegExp(string){
      return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
    }
    Ответ написан
    3 комментария
  • Yii2 и bootstrap 4, как обновить компоненты yiisoft/yii2-bootstrap до bootstrap4?

    @grozzzny
    Люблю кодить
    Подключите расширение через композер:
    composer require grozzzny/depends "dev-master"

    Затем в assets добавьте

    class AppAsset extends AssetBundle
    {
        public $depends = [
            'yii\web\YiiAsset',
            'grozzzny\depends\bootstrap4\Bootstrap4Asset',
            'grozzzny\depends\bootstrap4\Bootstrap4PluginAsset',
        ];
    }


    Класс Bootstrap4Asset при инициализации подписывается на события View и при возможности удаляет bootsrap 3
    class Bootstrap4Asset extends AssetBundle
    {
        public $sourcePath = '@vendor/twbs/bootstrap/dist';
        public $css = [
            'css/bootstrap.css',
        ];
    
        public function init()
        {
            parent::init(); // TODO: Change the autogenerated stub
            Yii::$app->view->on(View::EVENT_AFTER_RENDER, function (){
                unset(Yii::$app->view->assetBundles['yii\bootstrap\BootstrapAsset']);
            });
            Yii::$app->view->on(View::EVENT_BEGIN_BODY, function (){
                unset(Yii::$app->view->assetBundles['yii\bootstrap\BootstrapAsset']);
            });
        }
    }


    Таким образом можно играться с layouts.. Например админка может спокойно работать на bootstrap 3, а фронтенд на bootstrap 4.

    Но это еще не все.. Есть нюансы..
    С модальным окном пришлось унаследоваться от модального класса bootstrap 3
    С валидацией инпутов, перенаследовал миксины bootstrapa 4 и дописал в миксин реализацию от bootsrapa 3. (SCSS)
    Виджет меню стал примерно таким:
    <?= Nav::widget([
        'options' => ['class' => 'navbar-nav d-flex justify-content-between w-100'],
        'items' => [
            [
                'label' => ''Услуги,
                'options' => ['class' => 'nav-item'],
                'linkOptions' => ['class' => 'nav-link'],
                'url' => ['services'],
                'active' => Yii::$app->controller->id == 'services'
            ],
     ....
            [
                'label' => 'Контакты',
                'options' => ['class' => 'nav-item'],
                'linkOptions' => ['class' => 'nav-link'],
                'active' => Yii::$app->controller->id == 'contacts',
                'url' => ['/contacts']
            ]
        ]
    ]);?>

    Хлебные крошки:
    <nav aria-label="breadcrumb" class="mb-3">
        <?= Breadcrumbs::widget([
            'links' => $this->params['breadcrumbs'],
            'options' => ['class' => 'breadcrumb'],
            'tag' => 'ol',
            'itemTemplate' => "<li class='breadcrumb-item'>{link}</li>\n",
            'activeItemTemplate' => "<li class=\"breadcrumb-item active\" aria-current=\"page\">{link}</li>\n",
        ])?>
    </nav>

    Пагинация:
    <nav aria-label="Page navigation">
                <?= LinkPager::widget([
                    'pagination' => $provider->pagination,
                    'linkContainerOptions' => ['class' => 'page-item'],
                    'linkOptions' => ['class' => 'page-link'],
                    'disabledListItemSubTagOptions' => ['tag' => 'a', 'class' => 'page-link']
                ]) ?>
            </nav>


    Alerts:
    <?= Alert::widget([
                'options' => ['class' => 'alert alert-danger show', 'role' => 'alert'],
                'body' => $message,
            ]) ?>


    В общем в этой сборке cms от easyiicms, с которой можно спокойно работать с bootstrap 4. Там смеси от less и scss. CMS чисто шаблонная и измененная.. для себя писал, но решать вам
    composer create-project --prefer-dist --stability=dev grozzzny/yiicms www dev-master


    Вот еще надстройка Material Design for Bootstrap 4 с модулями от https://mdbootstrap.com:

    class AppAsset extends AssetBundle
    {
        public $depends = [
            ..
            //Material Design for Bootstrap 4
            'grozzzny\depends\mdbootstrap\MDBootstrapAsset',
            'grozzzny\depends\mdbootstrap\MDBootstrapPluginAsset',
            ..
       ];
    }


    В assetManager в главной конфигурации можно указать надстройки:
    'assetManager' => [
                'bundles' => [
                    // Если решили переопределить scss:
                    'grozzzny\depends\mdbootstrap\MDBootstrapAsset' => [
                        'basePath' => '@webroot',
                        'baseUrl' => '@web',
                        'css' => ['css/mdbootstrap/mdb.css'], 
                    ],
                    // Если решили подключить доступные модули в коллекции MDB:
                    'grozzzny\depends\mdbootstrap\MDBootstrapPluginAsset' => [
                        'chart' => true,
                        'enhancedModals' => true,
                        'formsFree' => true,
                        'jqueryEasing' => true,
                        'scrollingNavbar' => true,
                        'velocity' => true,
                        'waves' => true,
                        'wow' => true,
                    ],
                ],
            ],


    Создам нормальный лаяулт под Bootstrap 4 со всеми примерами и объяснениями, если данный ответ наберет лайки
    Ответ написан
    Комментировать
  • Нужно приложение для сравнения 2-х изображений, есть такое?

    @Macbet
    Linux программист
    попробуй вот так, например https://imagemagick.org/script/compare.php
    Ответ написан
    Комментировать
  • Закрыть все кроме 22, 80, 5432 портов через iptables?

    cjey
    @cjey
    должно получиться что-то вроде этого
    # Настраиваем политики по умолчанию
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP

    # удаляем все имеющиеся правила
    iptables -F
    iptables -t nat -F
    iptables -t mangle -F

    iptables -X
    iptables -t nat -X
    iptables -t mangle -X

    # правила входящих соединений
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT -i eth0 --match state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp --dport 80 --match state --state NEW -j ACCEPT
    iptables -A INPUT -i eth0 --source 192.168.0.10 -p tcp --dport 22 --match state --state NEW -j ACCEPT
    iptables -A INPUT -i eth0 --source 192.168.0.10 -p tcp --dport 5432 --match state --state NEW -j ACCEPT

    # Правила исходящих соединений
    iptables -A OUTPUT -o lo -j ACCEPT
    iptables -A OUTPUT -o eth0 --match state --state NEW, ESTABLISHED, RELATED -j ACCEPT

    Ответ написан
    Комментировать
  • Подсчитать количество лайков в ВК?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    см. метод likes.getList():
    post — запись на стене пользователя или группы;
    comment — комментарий к записи на стене;
    photo — фотография;
    audio — аудиозапись;
    video — видеозапись;
    note — заметка;
    market — товар;
    photo_comment — комментарий к фотографии;
    video_comment — комментарий к видеозаписи;
    topic_comment — комментарий в обсуждении;
    market_comment — комментарий к товару;
    sitepage — страница сайта, на котором установлен виджет «Мне нравится».
    Ответ написан
    Комментировать
  • Как создать виджет сообщества в 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 комментариев
  • Ftp доступ только к одному каталогу?

    saboteur_kiev
    @saboteur_kiev Куратор тега Ubuntu
    software engineer
    Если у вас VSFTPD, то настройте вашего юзера в etc/vsftpd/vsftpd.conf:
    chroot_local_user=NO
    chroot_list_enable=YES

    Укажите имя юзера в файле
    chroot_list_file=/etc/vsftpd.chroot_list

    юзер будет залочен в своей домашней папке.
    Можете в /etc/passwd ему сразу прописать /var/www/site1 как домашнюю папку

    P.S. Если прописать в настройках фтп сервера chroot_local_user=YES, то все юзеры КРОМЕ перечисленных в /etc/vsftpd.chroot_list будут залочены в своих домашних каталогах
    Ответ написан
    3 комментария
  • Как анимировать фон состоящий из 2ух картинок?

    lamer350
    @lamer350
    กำลังสูงสุด
    Проще всего внедрить какой нибудь валидный параметр для div, например data-speed.
    Тоисть в HTML ваш DIV выглядел бы так:
    <div class="section-1" id="container" data-speed="1">

    Это некий коэффициент, который вы можете регулировать как вам угодно, к примеру 0.5 если поставить - будет скролится в 2 раза медленнее, а если поставить 3 - будет скроллится в 2 раза быстрее.
    Тогда js код будет выглядеть так:
    function update() {
      var pos = $(window).scrollTop();
      $('.container').each(function() {
        var $element = $(this);
        var height = $element.height() - 18;
        var speed - $element.attr('data-speed');
        $(this).css('backgroundPosition', '50% ' + Math.round((height - pos*speed) * velocity) + 'px');
      });
      $('#container').css('backgroundPosition', '50% ' + Math.round(($('#container').height() - pos*speed) * velocity) + 'px' + '50% ' + Math.round(($('#container').height() - (pos*speed) / 2) * velocity) + 'px');
    };

    если кратко, чтобы легче было найти в чем отличии, вводите новую переменную speed и все pos умножаете на speed
    И потом в HTML методом перебора коэффициентов добиваетесь нужного вам эффекта.
    Ответ написан
    6 комментариев
  • Android, SimpleXML, ProGuard?

    megatron
    @megatron
    Попробуй так:
    -keep class com.simpleframework.** { *; }
    Ответ написан
    4 комментария