• Как правильно перенаправлять пользователя на нужную версию сайта?

    orlov0562
    @orlov0562
    Все зависит от задачи и ресурсов на разработку. В большинстве случаев мультиязычность подразумевает что контент будет разный и очень часто не зависим друг от друга. В таком случае нет повода привязываться к одной установке движка и одной базе - на каждый поддомен свою копию движка и базы, в чем проблема-то? Зачем одна админка на все языки, если контент не зависимый? Ну, а если уж надо там связи какие-то организовать (например связь статей), так это ручками допилить 5 минут делов и явно проще, чем делать мультидоменность и многоязычность. Да, еще надо будет следить за обновлениями движков, но опять же полно инструментария чтобы это автоматизировать. Зато плюсов полно: локализация, легко seo, легко разделить копирайтеров, легко делить пользователей, легко следить за региональной статистикой, разнести сайты по серверам в регионах назначения, добавить регионозависимый функционал (где-то основной праздник новый год, а где-то рождество), ну и т.д. Разумеется выбор как организовать проекты и по каким граблям прыгать - личное дело каждого.
  • Какой смысл в boxing/unboxing?

    orlov0562
    @orlov0562
    "int - это просто ведро" - насмешило :)

    Вот оригинал: stackoverflow

    Why

    To have a unified type system and allow value types to have a completely different representation of their underlying data from the way that reference types represent their underlying data (e.g., an int is just a bucket of thirty-two bits which is completely different than a reference type).

    Think of it like this. You have a variable "o" of type object. And now you have an int and you want to put it into "o". "o" is a reference to something somewhere, and the int is emphatically not a reference to something somewhere (after all, it's just a number). So, what you do is this: you make a new object that can store the int and then you assign a reference to that object to "o". We call this process "boxing."

    So, if you don't care about having a unified type system (i.e., reference types and value types have very different representations and you don't want a common way to "represent" the two) then you don't need boxing. If you don't care about having int represent their underlying value (i.e., instead have int be reference types too and just store a reference to their underlying value) then you don't need boxing.

    Where should I use it.

    For example, the old collection type ArrayList only eats objects. That is, it only stores references to somethings that live somewhere. Without boxing you cannot put an int into such a collection. But with boxing, you can.

    Now, in the days of generics you don't really need this and can generally go merrily along without thinking about the issue.
  • Обнаружил 60к внешних ссылок на несуществующий URL моего домена, как правильно поступить?

    orlov0562
    @orlov0562
    Можно:
    1) поставить счетчик (например liveinternet) на страницу 404. Это не очень поможет если это "левые" боты, зато просто и можно сразу увидеть кол-во, реферрер и страну пользователя.
    2) вести свою статистику по запросам приводящим к 404 на стороне бэкэнда (например в php)
    3) проанализировать access.log веб сервер. В нем обычно достаточно простой формат записей, по типу: дата, url страницы, ip. Его обычно можно найти в панели управления хостингом. Потом скачать к себе, открыть в блокноте и по части url удалить существующие ссылки, все что останется и будет "левым" трафиком. Тут будут прямо все и боты и посетители.
  • Как составить план обучения Python/Django?

    orlov0562
    @orlov0562
    Вкратце petstore - это веб приложение, с функционалом интернет магазина. Смысл в том, что при создании интернет магазина, ты ознакомишься с 95% тех техник работы с языком с которыми сталкиваются в любых остальных веб проектах.

    The Java Pet Store 2.0 Reference Application is a sample application brought to you by the Java BluePrints program at Sun Microsystems. This application is designed to illustrate how the Java Enterprise Edition 5 Platform can be used to develop an AJAX-enabled Web 2.0 application. The application comes with full source-code available under a BSD-style license, so you can experiment with it and use it in your own applications.

    The Java Pet Store 2.0 is the reference application for building Ajax web applications on Java Enterprise Edition 5 platform. It illustrates BluePrints for using Ajax with Java, building AJAX-enabled JSF component libraries, using Java Persistence APIs, applying MVC and other design patterns in an Ajax web app, using Mashups such as Google Maps service for location specific searches of pets and PayPal service for purchases, using an RSS feed as a data source, and lots more.

    With real, working code illustrating the BluePrints guidelines, the Java Pet Store 2.0 reduces the learning curve of the Java EE 5 platform, enabling you to deliver complete end-to-end solutions with faster time-to-market.


    Т.е. я тебе советовал, сделать блог, а затем каталог товаров (интернет магазин) с простыми бызовыми функциями: поиском, корзина, форма заказа и админкой. Если ты это сможешь делать, значит у тебя будет достаточный уровень идти на собеседование на позицию джуниора.
  • Как построить дерево?

    orlov0562
    @orlov0562 Куратор тега PHP
  • Как построить дерево?

    orlov0562
    @orlov0562 Куратор тега PHP
    gachkydxvbgd, проблема в том, что не понятно что такое childs в твоем коде

    ['childs'][$node->ID]

    у тебя есть элемент $tree[$node->menu_item_parent]
    WP_Post Object (
                [ID] => 35
                [menu_item_parent] => 0
        )


    ты вызываешь у него ['childs'], как я понимаю список потомков

    но т.к. это объект, то такая конструкция не прокатит, отсюда и ошибки

    Может там быть что-то типа того
    <?php
    
    $items = [
        (object) ['ID'=>35, 'menu_item_parent'=>0],
            (object) ['ID'=>38, 'menu_item_parent'=>35],
            (object) ['ID'=>36, 'menu_item_parent'=>35],
        (object) ['ID'=>37, 'menu_item_parent'=>0],
    ];
    
    function getTree($items){
        $tree = [];
        foreach ($items as $id=>$node) {
            if ($node->menu_item_parent == 0)
                $tree[$node->ID] = ['node'=>$node, 'childs'=>[]];
            else
             $tree[$node->menu_item_parent]['childs'][$node->ID] = ['node'=>$node, 'childs'=>[]];
        }
        return $tree;
    }
    
    $tree = getTree($items);
    
    echo '<pre>';
    print_r($tree);
    echo '</pre>';
    echo '<hr>';
    
    function printer($treeItem, $level) {
        if ($level) echo str_repeat('--', $level);
        echo $treeItem['node']->ID.'<br>';
        foreach($treeItem['childs'] as $subItem) {
            printer($subItem, $level+1);
        }
    }
    
    foreach($tree as $treeItem) printer($treeItem, 0);


    Но это будет работать только до второго уровня вложенности, т.к. должна быть рекурсия которой в твое варианте нет
  • Как построить дерево?

    orlov0562
    @orlov0562 Куратор тега PHP
    gachkydxvbgd, покажи код полностью
  • Как построить дерево?

    orlov0562
    @orlov0562 Куратор тега PHP
    не понятно откуда childs и какого оно типа, но наверно как-то так

    $tree[$node->menu_item_parent]['childs'][$node->ID] = &$node;
  • Как построить дерево?

    orlov0562
    @orlov0562 Куратор тега PHP
    <?php
    
    $items = [
        (object) ['ID'=>35, 'menu_item_parent'=>0],
            (object) ['ID'=>38, 'menu_item_parent'=>35],
            (object) ['ID'=>36, 'menu_item_parent'=>35],
                (object) ['ID'=>39, 'menu_item_parent'=>36],
                    (object) ['ID'=>40, 'menu_item_parent'=>39],
                    (object) ['ID'=>41, 'menu_item_parent'=>39],
        (object) ['ID'=>37, 'menu_item_parent'=>0],
    ];
    
    function find_childrens($items, $parentItem) {
        $ret = [];
        foreach($items as $item) {
            if ($item->menu_item_parent == $parentItem->ID) {
                $treeItem = $item;
                $treeItem->subitems = find_childrens($items, $item);
                $ret[] = $treeItem;
            }
        }
        return $ret;
    }
    
    $tree = [];
    
    foreach($items as $item) {
        if ($item->menu_item_parent == 0) {
            $treeItem = $item;
            $treeItem->subitems = find_childrens($items, $item);
            $tree[] = $treeItem; 
        }
    }
    
    echo '<pre>';
    print_r($tree);
    echo '</pre>';
    echo '<hr>';
    
    function printer($treeItem, $level) {
        if ($level) echo str_repeat('--', $level);
        echo $treeItem->ID.'<br>';
        if ($treeItem->subitems) {
            foreach($treeItem->subitems as $subItem) {
                printer($subItem, $level+1);
            }
        }
    }
    
    foreach($tree as $treeItem) printer($treeItem, 0);
  • Как построить дерево?

    orlov0562
    @orlov0562 Куратор тега PHP
    gachkydxvbgd, думаю, если тупо поменяешь в коде
    массив на объект, т.е.
    $item['menu_item_parent'] == $parentItem['ID']
    на
    $item->menu_item_parent == $parentItem->ID
    все продолжит работать
  • Как построить дерево?

    orlov0562
    @orlov0562 Куратор тега PHP
    Расширь свой вопрос, непонятно что за дерево ты хочешь и причем тут wordpress
  • Можно ли отменить отправку формы при попытке замены содержимого контейнера с помощью PJAX в Yii2?

    orlov0562
    @orlov0562
    $('#pjax-id')
    .on('pjax:click', function(event) {
    })
    .on('pjax:success', function(event) {
    })
    .on('pjax:error', function (event) {
        alert('Failed to load the page');
        event.preventDefault();
    });


    список event-ов тут: https://github.com/defunkt/jquery-pjax#events
  • Как на ubuntu посмотреть список пользователей, которые имеют root/админские права?

    orlov0562
    @orlov0562
    NikArtyom, выполни visudo и смотри там пользователей с записями типа
    {USERNAME} ALL=ALL
  • Как подключить footer в шаблон если он не в конце html кода?

    orlov0562
    @orlov0562
    k-2, да есть, почитай в официальной документации (она на русском)
    get_footer($name) - добавляет шаблон footer.php из директориии, в которой расположены шаблоны текущей темы. Если задан параметр name, то будет добавлен шаблон подвала с именем footer-{name}.php.
  • Выбор монитора для программиста, как правильно?

    orlov0562
    @orlov0562
    Виталий IIIFX Хоменко, удобно работать с текстом и серфить, это 95% времени по моим задачам. Сайты на 1920 по высоте выглядят совсем по-другому, а 1200 по ширине хватает для 99%. В общем, рекомендую попробовать, ведь это можно сделать, даже с обычным монитором, просто повернув его и зафиксировав.
  • Выбор монитора для программиста, как правильно?

    orlov0562
    @orlov0562
    ThemeZV, больше места по высоте. Если работаешь с текстом то его поместится больше на экране. Можешь посмотреть разрешения мониторов 16:9 и 16:10, затем просто где-нибудь в фотошопе нарисовать два прямоугольника один на другом (в размер разрешений), уменьшить их масштаб и увидишь разницу. Например у меня разрешение 1920x1200 вместо 1920x1080, т.е. у меня на экране помещается на 120 пикселей больше по высоте.
  • Как открывать адрес в новой вкладке из строки адреса по нажатию Enter в Firefox 57?

    orlov0562
    @orlov0562 Автор вопроса
    zooks, дело в том, что мне удобнее использовать Enter для открытия новой вкладки, а Alt+Enter для открытия в текущей. Суть в том, что редактируешь url ооооочень редко, в отличии от написания адресов и запросов в строке адреса. Кроме того, перейдя в строку адреса и нажав Enter, я ожидаю не обновления страницы, а открытия новой вкладки... Да, это дело привычки, но не удобно. Потому и ищу решение.
    Раньше это делал плагин Tab Mix Plus, но пока он находится в устаревших дополнениях (для FF 57). Сейчас использую для этого поле поиска, её поведение (открытие новой вкладки) можно менять через about:config, параметр browser.search.openintab. Но, это по прежнему не удобно..
  • Как в Yii2 обработать одновременные запросы на вставку одинаковых значений в БД?

    orlov0562
    @orlov0562
    Дмитрий Ким, все правильно сделал. Другой вариант вместо try/catch делать в запросе INSERT IGNORE, это уберет overhead на проверку исключений, но зачастую это не важно
  • Как реализовать подключение класса пхп?

    orlov0562
    @orlov0562 Куратор тега PHP
    romaaa32, обратись через ajax и посмотри что за пути напишет сервер

    так же убедись что у тебя правильный namespace, именно
    use modules\datebase\connection;


    т.к. database пишется с буквой "a", а не "e"