All streams
Search
Write a publication
Pull to refresh
0
0
ArtemS @ArtemS

User

Send message
Количество говонокода можно уменьшить лишь прокачав мозги и только.

Вам нравиться наследование — используйте. Если ваша команда состоит из верстальщиков-программистов, то несомненно вы получите выгоду от наследования.

С моей стороны понимайте это заботой о пользователе. Чем меньше он знает о программистских штуках тем лучше для него. И если был бы простой способ избавить шаблоны от циклов и переменных — я бы сделал это.
Отказ от <? в пользу <?php. Уже сейчас вы не можете вставить в шаблон xhtml строку
<?xml version=«1.0» encoding=«UTF-8» ?> предусмотренный стандартом.
Если у вас сейчас нет проблем с короткими тегами в шаблонах, вы не застрахованы что они у вас не появятся через год или два.
Наоборот, php код в xml файле. Вообще за конструкцией <? может идти все что угодно, xml, php да мало ли что еще придумают в будущем. И обработка коротких тегов добавляет только проблемы.
В случае когда короткие теги включены PHP будет интерпретировать xml вставки как свой код.
Я предлагаю их избавить от необходимости знать что это. Граница вхождения опуститься. А говнокод будут писать всегда, какие бы средства не предоставлять. Я просто всегда пропагандирую принцип KISS
Наследование в шаблонах!? Вы шутите? Верстальщик не программист, он не должен знать таких вещей как наследование, а в идеальном случае и цикл, переменная и т.п.

Легко установить. Распаковал и готово. А папки с веб-доступом называются везде по разному (www, public_html, webroot и т.д.) и объяснить ложнее, что в «какую-то» папку нужно запихать index.php
Вы не учли, что подключаемые классы Number, String и т.д. занимают дополнительную память (и время), даже если экземпляров этих классов не созданы.

ИМХО у данной библиотеки есть шанс только как расширение, тогда это действительно будет удобно.
Черт, конечно же я имел ввиду родительский класс. Там в начале было SubSubClass
Сорри, опечатался
SubClass.prototype.getName = function() {
    return "SubSubClass(id = " + this.getId() + ") extends " + SubClass.prototype.getName.call(this);
}

Имхо, статья вообще не о чем. Только запутывает. И примеры мне не понятные, вот почему в последнем случае нельзя делать так?

SubClass.prototype.getName = function() {
    return "SubSubClass(id = " + this.getId() + ") extends " + SubClass.call(this);
}

А зачем нужна такая абстракция?
Ясно, что реализация данной идеи будет сложной и неоднозначной, и все ради того, чтобы «можно» было в будущем использовать не sql базы данных.
Не увидел и не нашел в документации отложенной загрузки.
$comment->getUser()->getName() — Так можно?

И еще. ОРМ никак не запоминает объекты, поэтому в определенный момент времени у меня может быть 2 объекта в памяти, которые будут ссылаться на одну и туже запись в таблице, а это очень плохо.

Всегда в таблице primary key должен называться id, или можно назвать user_id?
Вообще-то, Модель напрямую влияет на предстваление.
С сокращении MVC, Controller — это Front Controller, т.е. получает и обрабатывает запросы пользователя, а модель формирует представление.
UFO landed and left these words here
UFO landed and left these words here
Вот на «чистом JS», проверил в FF3.0, IE6

        <script type="text/javascript">
            /*<![CDATA[*/
            (function() {
                var tree_init = function() {
                    this.clearWhitespace = function(element) {
                        var i, array = [];
                        for (i=0; i<element.childNodes.length; i++) {
                            if (element.childNodes[i].nodeType == 3) {
                                element.childNodes[i].nodeValue.match(/^[\s\r\n]+$/m) &&
                                    array.push(element.childNodes[i]);
                            } else {
                                this.clearWhitespace(element.childNodes[i]);
                            }
                        }
                        for (i=0; i<array.length; i++) {                            
                            array[i].parentNode.removeChild(array[i]);
                        }
                    }
                    this.addMarker = function() {
                        var ul_item = this.tree.getElementsByTagName("ul");
                        for (var i=0; i<ul_item.length; i++) {
                            var li_item = ul_item[i].getElementsByTagName("li");
                            for (var j=0; j<li_item.length; j++) {
                                var child = li_item[j].getElementsByTagName("ul");
                                if (child.length > 0 && li_item[j].parentNode == ul_item[i]) {
                                    var a_item = li_item[j].getElementsByTagName("a");
                                    if (a_item.length > 0 && a_item[0].parentNode.parentNode == li_item[j]) {
                                        a_item[0].innerHTML = '<em class="marker"></em>' + a_item[0].innerHTML;
                                    }
                                }
                            }
                        }
                    }
                    this.addEvent = function() {
                        var span_item = this.tree.getElementsByTagName("span");
                        var thisCopy  = this;
                        for (var i=0; i<span_item.length; i++) {
                            span_item[i].onclick = function() { thisCopy.click(this) };
                        }
                    }
                    this.setCurrent = function(a) {
                        if (this.current)
                            this.current.className =
                            this.current.className.replace("current", "");

                        this.current = a;
                        a.className += " current";
                    }
                    this.toggleClass = function(elem, classname) {
                        if (elem.className.indexOf(classname) != -1) {
                            elem.className = elem.className.replace(classname);
                            elem.className = elem.className.replace("  ", " ");
                        } else {
                            elem.className += " " + classname;
                        }
                    }
                    this.click = function(span) {
                        var subtree;
                        var a  = span.firstChild;
                        var li = span.parentNode;
                        var ul = span.nextSibling;
                        var em = a.firstChild;
                        this.setCurrent(a);
                        
                        if (li.nextSibling == null) {
                            li.hasChildNodes() && (subtree = li.childNodes[1]);
                            for (var i=0; i<subtree.childNodes.length; i++)
                                subtree.childNodes[i].className = "last";
                        }
                        if (ul && ul.nodeName.toLowerCase() == "ul")
                            ul.style.display = ul.offsetWidth > 0 ? "none" : "block";
                        if (em && em.nodeName.toLowerCase() == "em")
                            this.toggleClass(em, "open");
                    }

                    this.tree = document.getElementById('multi-derevo');
                    this.clearWhitespace(this.tree);
                    this.addMarker();
                    this.addEvent();
                }
                if (window.attachEvent) {
                    window.attachEvent("onload", tree_init);
                } else {
                    window.addEventListener("load", tree_init, false);
                }
            })()
            /*]]>*/
        </script>
Файлы он не открывает, а значит и изменять документы не может.
А можно сделать так
li {
float: left;
}

Information

Rating
Does not participate
Location
Россия
Works in
Date of birth
Registered
Activity