• Как правильно составить условие на PHP?

    @Jacome
    if (($a === 'aaa' || $b === 'bbb')&&(!$c || !$d))
    {
    echo '';
    }
    Ответ написан
    Комментировать
  • Движение данных по локальной сети?

    Кажется, вы сильно непонимание как работают сети. Стоит прочитать цикл статей https://linkmeup.ru/blog/1188/
    Ответ написан
    Комментировать
  • Windows 10 кавычки вводятся только парами?

    phactor
    @phactor
    Это раскладка клавиатуры. Наверняка стоит США - Международная. Нужна просто США.
    Ответ написан
    5 комментариев
  • Windows 10 кавычки вводятся только парами?

    @wmy
    Впечатление, что США международная ставится "невидимо". Переключение на русский срабатывает только со второго раза. Мне помогло установить эту раскладку явным образом, а потом удалить.
    Точнее так:
    установил США международная
    удалил США
    установил США
    удалил США международная
    Не знаю, важны ли дополнительные пункты :)
    Ответ написан
    1 комментарий
  • Можно ли дублировать строки в VS Code?

    @Barss07
    {
    "key": "ctrl+d",
    "command": "editor.action.copyLinesDownAction",
    "when": "editorTextFocus",
    }
    Ответ написан
    1 комментарий
  • Можно ли дублировать строки в VS Code?

    AndrewHaze
    @AndrewHaze
    Умею гуглить яндексом
    Конечно можно
    Shift + Alt + Down или Shift + Alt + Up

    P.S. Файл > Настройки > Сочетания клавиш

    Там же можно добавлять свои клавиатурные команды. Для этого нужно нажать на ссылку keybindings.json и разместить свой код в правом окне, затем сохранить файл keybindings.json.

    Например, так можно добавить возможность менять регистр символов с помощью клавиш CTRL+SHIFT+U и CTRL+SHIFT+L:
    [
     {
        "key": "ctrl+shift+u",
        "command": "editor.action.transformToUppercase",
        "when": "editorTextFocus"
     },
     {
        "key": "ctrl+shift+l",
        "command": "editor.action.transformToLowercase",
        "when": "editorTextFocus"
     }
    ]
    Ответ написан
    4 комментария
  • Как правильно составить условие на PHP?

    @v__V__v
    Разработчик
    Замените вложенные условия на одно:
    if (($a == 'aaa' || $b == 'bbb') && !($c && $d)){
      echo '';
    }
    Ответ написан
    Комментировать
  • PHP при переборе массива разнести его на несколько областей?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    Там придется заморочиться немного. У меня в магазине 2 меню:
    • одно - каталог товаров, где родительский пункт меню - один - "каталог"
    • второе - обычное меню с контактами, доставками и т.д.

    Вот для меню-каталога я сделал свой макет вывода mod_menu. В modules/mod_menu/tmpl есть 5 файлов:
    1. default.php - сам цикл по массиву с пунктами
    2. default_component.php - layout для вывода ссылки на компонент
    3. default_heading.php - заголовок
    4. default_separator.php - разделитель
    5. default_url.php - внешняя ссылка

    Все это дело копируем в ту же папку и заменяем в названии файлов "default" на что-то свое - catalog.php, catalog_component.php и т.д. В основном файле с циклом нужно имена лейаутов в switch-case подправить тоже на "catalog".

    В настройках модуля есть параметр "начальный уровень". Скрины для тройки, но в четверке то же самое должно быть.
    61f0c71d674c5467287356.png
    61f0c72b67ac9009266415.png
    У каждого элемента объекта с пунктами меню есть parent_id.
    $item->deeper - флаг, означающий, что есть вложенные пункты меню.
    $item->shallower означает, что это последний пункт меню (вообще в меню в целом) и можно ставить закрывающие теги.
    Нам нужно разделить меню на левую часть и правую часть. В пункты меню нужно вставить атрибуты ссылкам со всякими айдишниками, чтобы на js обрабатывать ховеры мышки. Это делается уже в файлах лейаутов.
    Вот код по нему может будет понятно.
    Catalog.php
    <?php
    /**
     * @package     Joomla.Site
     * @subpackage  mod_menu
     *
     * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
     * @license     GNU General Public License version 2 or later; see LICENSE.txt
     */
    
    defined('_JEXEC') or die;
    use Joomla\CMS\Factory;
    use Joomla\CMS\Helper\ModuleHelper;
    
    $id = '';
    
    if ($tagId = $params->get('tag_id', ''))
    {
    	$id = ' id="' . $tagId . '"';
    }
    
    $main_menu = '<ul class="nav menu '.$class_sfx . ' mod-list'.$id.'">';
    
    $sub_menus = '';
    $sub_menu = '';
    
    // The menu class is deprecated. Use nav instead
    ?>
    
    	<?php foreach ($list as $i => &$item)
    	{
    		//если пункт меню верхнего уровня (из настроек)
    		if($params->get('startLevel', '') == $item->level){
    			$class = 'item-' . $item->id;
    
    			if ($item->id == $default_id)
    			{
    				$class .= ' default';
    			}
    
    			if ($item->id == $active_id || ($item->type === 'alias' && $item->params->get('aliasoptions') == $active_id))
    			{
    				$class .= ' current';
    			}
    
    			if (in_array($item->id, $path))
    			{
    				$class .= ' active';
    			}
    			elseif ($item->type === 'alias')
    			{
    				$aliasToId = $item->params->get('aliasoptions');
    
    				if (count($path) > 0 && $aliasToId == $path[count($path) - 1])
    				{
    					$class .= ' active';
    				}
    				elseif (in_array($aliasToId, $path))
    				{
    					$class .= ' alias-parent-active';
    				}
    			}
    
    			if ($item->type === 'separator')
    			{
    				$class .= ' divider';
    			}
    
    			if ($item->deeper)
    			{
    				$class .= ' deeper';
    			}
    
    			if ($item->parent)
    			{
    				$class .= ' parent';
    			}
    
    			$main_menu .= '<li class="nav-item d-flex ' . $class . '" data-target-id="'.$item->id.'">';
    
    			switch ($item->type) :
    				case 'separator':
    				case 'component':
    				case 'heading':
    				case 'url':
    					require ModuleHelper::getLayoutPath('mod_menu', 'catalog_' . $item->type);
    					break;
    
    				default:
    					require ModuleHelper::getLayoutPath('mod_menu', 'catalog_url');
    					break;
    			endswitch;
    
    				if ($item->deeper)
    				{
    					$sub_menu .= '<ul class="nav tab-pane fade'.$id.'" role="tabpanel" id="catalog-submenu-'.$item->id.'">';
    				}
    				elseif ($item->shallower)
    				{
    					$sub_menu .= '</ul>';
    				}
    				$main_menu .= '</li>';
    
    
    		} else {
    			$class = 'item-' . $item->id;
    
    			if ($item->id == $default_id)
    			{
    				$class .= ' default';
    			}
    
    			if ($item->id == $active_id || ($item->type === 'alias' && $item->params->get('aliasoptions') == $active_id))
    			{
    				$class .= ' current';
    			}
    
    			if (in_array($item->id, $path))
    			{
    				$class .= ' active';
    			}
    			elseif ($item->type === 'alias')
    			{
    				$aliasToId = $item->params->get('aliasoptions');
    
    				if (count($path) > 0 && $aliasToId == $path[count($path) - 1])
    				{
    					$class .= ' active';
    				}
    				elseif (in_array($aliasToId, $path))
    				{
    					$class .= ' alias-parent-active';
    				}
    			}
    
    			if ($item->type === 'separator')
    			{
    				$class .= ' divider';
    			}
    
    			if ($item->deeper)
    			{
    				$class .= ' deeper';
    			}
    
    			if ($item->parent)
    			{
    				$class .= ' parent';
    			}
    
    			$sub_menu .= '<li class="' . $class . '">';
    
    			switch ($item->type) :
    				case 'separator':
    				case 'component':
    				case 'heading':
    				case 'url':
    					require ModuleHelper::getLayoutPath('mod_menu', 'catalog_' . $item->type);
    					break;
    
    				default:
    					require ModuleHelper::getLayoutPath('mod_menu', 'catalog_url');
    					break;
    			endswitch;
    
    			// The next item is deeper.
    			if ($item->deeper)
    			{
    				$sub_menu .= '<ul class="nav-child unstyled small">';
    			}
    			// The next item is shallower.
    			elseif ($item->shallower)
    			{
    				$sub_menu .= '</li>';
    				$sub_menu .= str_repeat('</ul></li>', $item->level_diff);
    			}
    			// The next item is on the same level.
    			else
    			{
    				$sub_menu .= '</li>';
    			}
    		}
    	}
    	$main_menu .= "</ul>";
    	$sub_menu .= "</ul>";
    
    	$sub_menus .= $sub_menu;
    
    	?>
    <div class="mainmenu col-12 col-md-4 col-lg-3">
    	<?php
    		echo $main_menu;
    	?>
    </div>
    <div class="submenu bg-white col-12 d-md-block col-md-8 col-lg-9">
    	<div class="tab-content overflow-auto" id="catalog-submenu-tabContent" role="tablist">
    		<button class="btn btn-sm btn-outline-secondary d-md-none fas fa-chevron-left my-2" id="submenu-back-btn"><span class="ml-2">Назад</span></button>
    		<?php echo $sub_menus;?>
    	</div>
    </div>


    Для примера - catalog_component.php. Этот файл вызывается в предыдущем catalog.php с помощью ModuleHelper::getLayoutPath('mod_menu', 'catalog_' . $item->type); . $item->type там будет содержать название лейаута - component.

    <?php
    /**
     * @package     Joomla.Site
     * @subpackage  mod_menu
     *
     * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
     * @license     GNU General Public License version 2 or later; see LICENSE.txt
     */
    
    defined('_JEXEC') or die;
    
    $attributes = array();
    
    if ($item->anchor_title)
    {
    	$attributes['title'] = $item->anchor_title;
    }
    $attributes['class'] .= "nav-link w-100";
    if ($item->anchor_css)
    {
    	$attributes['class'] = $item->anchor_css;
    }
    
    if ($item->anchor_rel)
    {
    	$attributes['rel'] = $item->anchor_rel;
    }
    
    $linktype = $item->title;
    
    if ($item->menu_image)
    {
    	if ($item->menu_image_css)
    	{
    		$image_attributes['class'] = $item->menu_image_css;
    		$linktype = JHtml::_('image', $item->menu_image, $item->title, $image_attributes);
    	}
    	else
    	{
    		$linktype = JHtml::_('image', $item->menu_image, $item->title);
    	}
    
    	if ($item->params->get('menu_text', 1))
    	{
    		$linktype .= '<span class="image-title">' . $item->title . '</span>';
    	}
    }
    
    if ($item->browserNav == 1)
    {
    	$attributes['target'] = '_blank';
    }
    elseif ($item->browserNav == 2)
    {
    	$options = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes';
    
    	$attributes['onclick'] = "window.open(this.href, 'targetWindow', '" . $options . "'); return false;";
    }
    
    
    //если пункт меню верхнего уровня (из настроек)
    if($params->get('startLevel', '') == $item->level){
    	$main_menu .= JHtml::_('link', JFilterOutput::ampReplace(htmlspecialchars($item->flink, ENT_COMPAT, 'UTF-8', false)), $linktype, $attributes);
    	if($item->deeper){
    		$main_menu .=  '<button class="btn ml-auto d-flex align-items-center mr-lg-2" data-target="catalog-submenu-'.$item->id.'" role="tab" id="child-menu-toggler-'.$item->id.'"><i class="fas fa-chevron-right"></i></button>';
    	}
    
    } else {
    	$sub_menu .= JHtml::_('link', JFilterOutput::ampReplace(htmlspecialchars($item->flink, ENT_COMPAT, 'UTF-8', false)), $linktype, $attributes);
    }


    Попробуйте доковырять под себя. Может поможет.
    Ответ написан
    Комментировать
  • Как редактировать google календарь через Outlook 2016?

    Если верить этой статье, то нет.
    https://support.office.com/ru-ru/article/%D0%9E%D0...

    Раздел "Подписка на Календарь Google"
    "ПРИМЕЧАНИЕ : Чтобы внести изменения в свой календарь Google, необходимо использовать Календарь Google. Изменения, внесенные в Outlook, не отправляются в Календарь Google." (C)

    Видимо из-за того, что Google не знает кто ему хочет отправить изменения. Вот если бы мы при настройке календаря указали учетку от google, этобы все поменяло.
    p.s. Кстати google календарь отлично редактируется в одноименном приложении на Windows 10.
    Ответ написан
    Комментировать
  • Как подключить gulp-autoprefixer в gulpfile.js?

    northfire
    @northfire
    npm i gulp-autoprefixer -S

    var gulp        = require('gulp'), 
        sass        = require('gulp-sass'), 
    autoprefixer = require('gulp-autoprefixer'),
        browserSync = require('browser-sync'); 
    
    
    gulp.task('sass', function(){ 
        return gulp.src(['app/sass/**/*.sass', 'app/sass/**/*.scss']) 
            .pipe(sass({outputStyle: 'expanded'}).on('error', sass.logError))
            .pipe(autoprefixer(['last 15 versions', '> 1%', 'ie 8', 'ie 7'], { cascade: true }))
            .pipe(gulp.dest('app/css')) 
            .pipe(browserSync.reload({stream: true})) 
    });
    Ответ написан
    2 комментария
  • Что делаю не так при настройке gulp browser-sync?

    @StockholmSyndrome
    const brSync = ...
    .on('change', browserSync.reload);
    я думаю, без лишних слов очевидно

    и ещё:
    brSync.init({
      sever: {  // sever?
        baseDir: "./app"
      },
      notify: false
    });
    Ответ написан
    1 комментарий
  • Бесплатные русские CMS?

    iam_not_a_robot
    @iam_not_a_robot
    Эгея blogengine.ru
    Ответ написан
    Комментировать
  • Бесплатные русские CMS?

    GoldenYear
    @GoldenYear
    Ответ написан
    Комментировать
  • Событие jQuery при попадание элемента в поле зрения пользователя?

    userAlexander
    @userAlexander
    Верстка наше все)
    В поле зрения пользователя это значит когда пользователь доскроллил до элемента который находиться где то в контенте?

    Например
    var target = $('.elem');
    var targetPos = target.offset().top;
    var winHeight = $(window).height();
    var scrollToElem = targetPos - winHeight;
    $(window).scroll(function(){
    	var winScrollTop = $(this).scrollTop();
    	if(winScrollTop > scrollToElem){
    		//сработает когда пользователь доскроллит к элементу с классом .elem
    	}
    });
    Ответ написан
    4 комментария
  • Помогите выбрать монитор для графики

    Сильно зависит от бюджета. Например, (если брать 24") NEC PA241W очень хорош как раз для профессиональной работы с цветом: расширенный охват, мощнейшие возможности для калибровки, псевдо-10-битная матрица (8 бит + AFRC) и т.д., но этот моник довольно дорогой. Если в бюджет не укладывается, можно обратить внимание на упрощённую модель P241W, с обычным цветовым охватом и 8-битной матрицей. Ниже идут уже, так сказать, «почти профессиональные» мониторы, которые можно отнести в категорию топ-левела для домашнего применения, такие как 2490WUXi: качественная реализация, матрица с честными 8 битами, неплохая заводская настройка. Ну а ещё дешевле идут уже модели, всё более приближающиеся к бюджетным решениям: ухудшение равномерности подсветки, некорректные гамма-кривые, переход от 8-битной к псевдо-8-битной матрице (6-битная с AFRC), ну и, наконец, отказ от IPS в пользу более дешёвых MVA/PVA/TN, но здесь уже говорить о работе с цветом просто смешно.

    На всякий пожарный: если кто вдруг остановит выбор на проф. моделях PA-серии у NEC'а, но посчитает, что 24" — это слишком много, брать PA231W не стоит: хоть она и относится к серии PA, эта маркировка здесь чисто номинальная, по характеристикам и качеству это весьма средненький монитор.

    PS: Сорри, что пишу здесь только про NEC. Так сложилось, что больше всего имел дело именно с ними, и про моники остальных фирм знаю практически только понаслышке.
    Ответ написан
    4 комментария