Как я могу создать сайт в php и иметь его, генерируют статическую версию?

Конечная проблема с использованием this вместо prototype заключается в том, что при переопределении метода конструктор базового класса все равно будет ссылаться на переопределенный метод. Рассмотрим это:

BaseClass = function() {
    var text = null;

    this.setText = function(value) {
        text = value + " BaseClass!";
    };

    this.getText = function() {
        return text;
    };

    this.setText("Hello"); // This always calls BaseClass.setText()
};

SubClass = function() {
    // setText is not overridden yet,
    // so the constructor calls the superclass' method
    BaseClass.call(this);

    // Keeping a reference to the superclass' method
    var super_setText = this.setText;
    // Overriding
    this.setText = function(value) {
        super_setText.call(this, "SubClass says: " + value);
    };
};
SubClass.prototype = new BaseClass();

var subClass = new SubClass();
console.log(subClass.getText()); // Hello BaseClass!

subClass.setText("Hello"); // setText is already overridden
console.log(subClass.getText()); // SubClass says: Hello BaseClass!

по сравнению с:

BaseClass = function() {
    this.setText("Hello"); // This calls the overridden method
};

BaseClass.prototype.setText = function(value) {
    this.text = value + " BaseClass!";
};

BaseClass.prototype.getText = function() {
    return this.text;
};

SubClass = function() {
    // setText is already overridden, so this works as expected
    BaseClass.call(this);
};
SubClass.prototype = new BaseClass();

SubClass.prototype.setText = function(value) {
    BaseClass.prototype.setText.call(this, "SubClass says: " + value);
};

var subClass = new SubClass();
console.log(subClass.getText()); // SubClass says: Hello BaseClass!

Если вы считаете, что это не проблема, это зависит от того, можете ли вы жить без частных переменных и достаточно опытный, чтобы узнать утечку, когда вы ее видите. Кроме того, необходимость поставить логику конструктора после определения методов неудобна.

var A = function (param1) {
    var privateVar = null; // Private variable

    // Calling this.setPrivateVar(param1) here would be an error

    this.setPrivateVar = function (value) {
        privateVar = value;
        console.log("setPrivateVar value set to: " + value);

        // param1 is still here, possible memory leak
        console.log("setPrivateVar has param1: " + param1);
    };

    // The constructor logic starts here possibly after
    // many lines of code that define methods

    this.setPrivateVar(param1); // This is valid
};

var a = new A(0);
// setPrivateVar value set to: 0
// setPrivateVar has param1: 0

a.setPrivateVar(1);
//setPrivateVar value set to: 1
//setPrivateVar has param1: 0

по сравнению с:

var A = function (param1) {
    this.setPublicVar(param1); // This is valid
};
A.prototype.setPublicVar = function (value) {
    this.publicVar = value; // No private variable
};

var a = new A(0);
a.setPublicVar(1);
console.log(a.publicVar); // 1
18
задан Nathan Peretic 16 September 2008 в 13:39
поделиться

10 ответов

Если Вы имеете систему Linux в наличии для Вас использование wget:

wget -k -K  -E -r -l 10 -p -N -F -nH http://website.com/

Опции

  • К: преобразуйте ссылки на родственника
  • -K: сохраните исходные версии файлов без преобразований сделанными wget
  • -E: переименуйте файлы HTML к .html (если у них don’t уже есть htm (l) расширение)
  • -r: recursive†¦, конечно, мы хотим сделать рекурсивную копию
  • -l 10: максимальный уровень рекурсии. если у Вас есть действительно большой веб-сайт, Вы, возможно, должны поместить более высокое количество, но 10 уровней должны быть достаточно.
  • -p: загрузите все необходимые файлы для каждой страницы (CSS, js, изображения)
  • Н: Включите добавление метки времени.
  • -F: Когда введенный будет считан из файла, вынудите его рассматриваться как файл HTML.
  • -nH: По умолчанию, wget помещенные файлы в каталоге, названном в честь site’s имени хоста. Это будет отключенное создание тех каталогов имени хоста и помещать все в текущий каталог.

Источник: блог

Jean-Pascal Houde
40
ответ дан 30 November 2019 в 06:23
поделиться

Я сделал это в прошлом путем добавления:

ob_start();

В вершине страниц и затем в нижнем колонтитуле:

$page_html = ob_get_contents();
ob_end_clean();
file_put_contents($path_where_to_save_files . $_SERVER['PHP_SELF'], $page_html);

Вы могли бы хотеть преобразовать .php расширения .html прежде, чем испечь HTML в файлы. Если необходимо генерировать несколько страниц с переменными, одна довольно легкая опция состоит в том, чтобы добавить имя файла с md5sum всех, ПОЛУЧАЮТ переменные, просто необходимо изменить их в HTML также. Таким образом, можно преобразовать:

somepage.php?var1=hello&var2=hullo

кому:

somepage_e7537aacdbba8ad3ff309b3de1da69e1.html

ужасный, но работы.

Иногда можно использовать PHP для генерации JavaScript для эмуляции некоторых функций, но это не может быть автоматизировано очень легко.

3
ответ дан 30 November 2019 в 06:23
поделиться

создайте свой сайт, затем используйте инструмент зеркального отражения как wget или lwp-зеркало для захвата статической копии

3
ответ дан 30 November 2019 в 06:23
поделиться

Создайте сайт как нормальный, затем используйте программное обеспечение глобального поиска для генерации копии HTML.

HTTrack является программным обеспечением, которое я использовал прежде.

1
ответ дан 30 November 2019 в 06:23
поделиться

При использовании modx, он имеет созданный в функции для экспорта статических файлов.

1
ответ дан 30 November 2019 в 06:23
поделиться

Один способ сделать это должно создать сайт в PHP как нормальный, и иметь сценарий, на самом деле захватывают веб-страницы (через HTTP - можно использовать wget или записать другой сценарий PHP, который просто использует файл () с URL), и сохраните их к местоположениям общедоступного сайта, когда Вы "сделаны". Затем можно просто запустить скрипт снова, когда Вы решаете изменить страницы снова. Этот метод довольно полезен, когда у Вас есть медленно изменяющаяся база данных и большой трафик, поскольку можно устранить все SQL-запросы на живом сайте.

1
ответ дан 30 November 2019 в 06:23
поделиться

Кроме того, к wget Вы могли использовать (Win|Web) HTTrack ( Веб-сайт ) для захвата статической страницы. HTTrack даже исправляет ссылки на файлы и документы для соответствия статическому выводу.

1
ответ дан 30 November 2019 в 06:23
поделиться

Если у Вас есть многие страницы со всеми видами переменных запроса и этажерки, вероятно, один из глобального поиска оснащает других комментаторов, упомянули (wget, lwp-зеркало, и т.д.) было бы самым легким и большая часть надежного решения.

Однако, если число страниц необходимо добраться, является низким, или по крайней мере управляемые , у Вас есть несколько опций, которые не требуют никаких сторонних инструментов (не, что необходимо обесценить их ПРОСТО, потому что они - третье лицо).

  1. можно использовать php на командной строке, чтобы заставить это производить непосредственно в файл.

    php myFile.php > myFile.html

    Используя этот метод мог стать болезненным (хотя Вы могли поместить все это в сценарий оболочки), и это не позволяет Вам передавать переменные таким же образом (например: php myFile.php?abc=1 не будет работать).

  2. Вы могли использовать другой файл PHP в качестве сценария "сборки", который содержит список всех URL, которые Вы хотите, и затем захватывает их через file_get_contents() или file() и пишет им в локальный файл. Используя этот метод, можно также заставить это проверять, изменился ли файл (md5_file(), должен работать на тот), таким образом, Вы будете знать, что дать Вашему клиенту, должны они только хотеть обновления.

  3. в дополнение к № 2 перед записью вывода в файл просканируйте его для локальных URL и затем добавьте URL к списку файлов для загрузки. В то время как Вы там, изменяете те URL для соединения с тем, что Вы в конечном счете назовете своим выводом, таким образом, у Вас будет функционирующая сеть в конце. Предупреждение здесь - если это звучит хорошим, Вы могли бы, вероятно, использовать один из инструментов, которые уже существуют и делают это для Вас.

1
ответ дан 30 November 2019 в 06:23
поделиться

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

find site_folder -name \*.static.php -print -exec Staticize {} \;

с Staticize тем, чтобы быть:

# This replaces .static.php with .html
TARGET_NAME="`dirname "$1"`/"`basename "$1" .static.php`".html
php "$1" > "$TARGET_NAME"
0
ответ дан 30 November 2019 в 06:23
поделиться

wget является, вероятно, самым полным методом. Если у Вас нет доступа к этому, и у Вас есть основанное на шаблоне расположение, можно хотеть изучить использование Ученого 3. Я рекомендую Ученому 3 высоко по другим шаблонным системам как Присяжный острослов.

Ученый является очень легким весом и использует PHP в качестве шаблонного языка, не некоторый собственный подъязык. Команда, которую Вы хотели бы искать, является выборкой (), который "скомпилирует" Ваш шаблон и поместит его в переменную, которую можно произвести.

http://www.phpsavant.com/

0
ответ дан 30 November 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: