Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
vp-webdev
6 лет назад

Храним контент сайта в блокчейне Голос

Эксплуатируем Блокчейн Голоса по полной, или как создать коммерческий сайт с размещением в Блокчейне: инструкция от незрячего пользователя @denis-skripnik


Здравствуйте. Несколько дней назад мне пришла в голову идея, что Блокчейн - это децентрализованная база данных, а значит можно размещать не только посты блогов, но и любые данные, например, страницы сайтов. О том, как разместить в Блокчейне Голоса коммерческий сайт и вывести его, и пойдёт речь в этой статье.

Способ 1: Размещение всего HTML кода

Включая doctype, head и так далее. Этот метод плох тем, что не позволяет использовать визуальные редакторы, а также есть вероятность, что при публикации лишние теги, типа html и head, будут удалены. Давайте попробуем это сделать прямо сейчас. Заходим в Goldvoice, создаём аккаунт (У меня это @golos-site) и добавляем новый пост:

  • Заголовок: "Главная" (Любой);
  • Текст на скриншоте (Страница редактирования поста в Goldvoice):
    Код страницы в редакторе Goldvoice

Теперь давайте попробуем вывести эту страницу у себя на сервере. Алгоритм следующий:

  1. Создаём html/php файл с кодом, отвечающим за вывод текста поста, не подключая заголовок и т. п.;
  2. Проверяем работу.

Я буду использовать библиотеку @php-node-client, так как она работает напрямую с Блокчейном, что позволяет не нагружать базу данных Golos.Sql, как это было бы в случае с использованием @golosapi2. Посмотреть инструкцию по установки выбранной мной библиотеки можно на github
У меня сервер настроен, поэтому просто загружаю библиотеку и создаю файл index.php. Как загружал php-node-client, показывать не буду, но вот исходник файла покажу:

<?php

require 'vendor/autoload.php'; // Подключаю файл, содержащий все зависимости скрипта php-node-client

use GrapheneNodeClient\Commands\CommandQueryData;
use GrapheneNodeClient\Commands\DataBase\GetContentCommand;
use GrapheneNodeClient\Connectors\WebSocket\GolosWSConnector;

$commandQuery = new CommandQueryData();

// golos-site - автор, glavnayaglavnaya - permlink
$data = ['golos-site','glavnayaglavnaya'];

$commandQuery->setParams($data);

$connector = new GolosWSConnector();

$command = new GetContentCommand($connector);

$res = $command->execute($commandQuery);

echo $res['result']['body']; // Подключаем html код
?>

В результате получаем такую страницу:
Страница, сгенерированный html шаблон

Всё. Как вы видете, страница(то чо в белом блоке пост на голосе) подгрузилась из Блокчейна Голоса. Yahoo!

Способ 2: динамический сайт

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

1. Структура

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

Файл index.php

Этот файл будет содержать шаблон, подключающий другие файлы: head.php, header.php, content.php, sidebar.php, footer.php:

<?php
require 'head.php';
require 'header.php';
require 'content.php';
require 'sidebar.php';
require 'footer.php';
?>

Теперь создаём каждый из файлов.

content.php

Начали с этого файла, так как он является основным, поскольку в нём будут подгружаться посты-страницы. Поскольку размер оказался довольно большим, вот ссылка на код: https://pastebin.com/JTu9mhGf
Или на скрине:
Скриншот файла content.php
https://i.imgur.com/uiuCCHr.png

head.php

В начале я хотел разместить head секцию в блокчейне, но потом понял, что это не совсем удобно, да и все сохранённые изменения в блокчейне сохраняются, что не есть Гуд для секции, которая относится к шаблону. К тому-же, этот вариант требует вставки кода php, а его может не пропустить клиент goldvoice и golos.io.
Но я решил для теста изменить пост "Главная" с учётом потребностей: добавил в title

<?php echo $res['result']['title']; ?>

, но ничего не вышло. Также попробовал '.$res['result']['title'].', но в обоих случаях отображалось то, что я ввёл, а не результат.
Может чего-то я упускаю, но факт на лицо: придётся делать php файл с выводом получения данных поста. С другой стороны так даже лучше: больше напоминает то, как делается в CMS.

Вот ссылка на исходный код файла: https://pastebin.com/xWbrRcMK
Или скрин:
Содержимое head.php
https://i.imgur.com/ycQkKKK.png

header.php

Шапка сайта зависит от конкретного веб-сайта, поэтому расскажу о двух вариантах:

  1. Создаём файл header.php и вручную прописываем там всё необходимое или, если найдёте способ, как подгружать список ссылок на только нужные страницы из Голоса, можно прописать то же меню на php, как в популярных движках.
  2. Этот вариант - это создать пост header и прописать всё там. Преимущество в том, что можно использовать визуальный редактор: просто добавляете всё так, как вам больше нравится, и сохраняете.

Опишу второй вариант подгрузки header.
Для начала создадим файл header.php и добавим туда следующее:

<header class="header">
<?php

require 'vendor/autoload.php';

use GrapheneNodeClient\Commands\CommandQueryData;
use GrapheneNodeClient\Commands\DataBase\GetContentCommand;
use GrapheneNodeClient\Connectors\WebSocket\GolosWSConnector;

$commandQuery = new CommandQueryData();

$data = ['golos-site','header'];

$commandQuery->setParams($data);

$connector = new GolosWSConnector();

$command = new GetContentCommand($connector);

$res = $command->execute($commandQuery);

echo $res['result']['body'];
?>
</header>

Теперь создадим пост с заголовком header и перенесём часть между тегами header в пост (Вы можете прописать там всё, что захотите).
Пост header в Goldvoice

После этого я перешёл на сайт - всё работает.

Следующий блок - это сайдбар.

Просто копируем header.php, переименовываем в sidebar.php, заменяем в массиве $data header на sidebar, добавляем другой html код, соответствующий сайдбару. Далее создаём пост с сайдбаром.

<aside class="right-sidebar">
<?php

require 'vendor/autoload.php';

use GrapheneNodeClient\Commands\CommandQueryData;
use GrapheneNodeClient\Commands\DataBase\GetContentCommand;
use GrapheneNodeClient\Connectors\WebSocket\GolosWSConnector;

$commandQuery = new CommandQueryData();

$data = ['golos-site','sidebar'];

$commandQuery->setParams($data);

$connector = new GolosWSConnector();

$command = new GetContentCommand($connector);

$res = $command->execute($commandQuery);

echo $res['result']['body'];
?>
</aside>

</div>

Пост на golsvoice:
На Goldvoice

Проверка на сайте: появился. Правда пока под футером, но это исправимо.

<footer class="footer">
<?php

require 'vendor/autoload.php';

use GrapheneNodeClient\Commands\CommandQueryData;
use GrapheneNodeClient\Commands\DataBase\GetContentCommand;
use GrapheneNodeClient\Connectors\WebSocket\GolosWSConnector;

$commandQuery = new CommandQueryData();

$data = ['golos-site','footer'];

$commandQuery->setParams($data);

$connector = new GolosWSConnector();

$command = new GetContentCommand($connector);

$res = $command->execute($commandQuery);

echo $res['result']['body'];
?>
        </footer>

</div>

</body>
</html>

Вот так, друзья. Почти всё сделали. Теперь внесём некоторые изменения.

Правки

  1. В файле head.php добавляем body и div с классом wrapper (В посте "Главная" удаляем);
  2. В content.php добавляем открывающий div с классом "middle", открывающий и закрывающий тег main с классом content, а также div с классом container.

Всё.


Вся страница

Теперь давайте для проверки работоспособности адресов вида http://goloses.ru/?page=o-kompanii создадим в Голдвойсе страницу "О компании" с permlink o-kompanii.
Работает: http://goloses.ru/?page=o-kompanii
Пост о компании на Goldvoice

А теперь на сайте:
Страница о компании на сайте

Последние штрихи

Давайте создадим ЧПУ при помощи .htaccess:

Options -Indexes

<IfModule mod_rewrite.c>
    RewriteEngine On # Включение режима
    RewriteRule ^([0-9-a-z.]+).html/?$ index.php?page=$1 [NC,L]
</IfModule>

Всё. Теперь страницы доступны и по адресу http://goloses.ru/o-kompanii.html, что гораздо круче, чем get url.

Применение

Вы можете делать сайты компаний, сайты интернет-магазинов, представляя товары в виде постов, а отображать их при помощи уникальных тегов, к примеру в моём случае golos-site-telephones - категория для мобильных телефонов. Но я пока не планирую такую или иную категорию делать.
Способы оплаты, корзину и т. п. подключать при помощи Pokupo.

Второй фичей является возможность вывода комментариев к постам из Голоса таким-же методом, как и посты, только с использованием GetContentRepliesCommand. Это открывает уникальные возможности:

  • Вы можете собирать отзывы от клиентов. Они будут регистрироваться на Голосе, голосовать за ваши товары и оставлять комментарии, делая их популярнее на платформе Golos, а также повышая репутацию аккаунта компании;
  • Вы можете создать страницу с отзывами о компании и выводить комментарии из Голоса там.

Всё это создаёт невероятные возможности для развития Голоса, как универсальной платформы для публикации данных! А значит, Блокчейн будет жить долго, несмотря на какие-либо встряски.
А когда появится возможность создавать токены, можно будет выделить отдельный токен для проектов подобного типа, чтоб они не уменьшали пул наград. Другой вариант: не давать возможность добавления апвоутов клиентам, но такой подход уменьшает возможность повышения репутации бизнеса, что тоже не есть хорошо.

Заключение

Надеюсь, идея моя вам пришлась по вкусу. Интересно, кто-нибудь будет её реализовывать, и что вы вообще об этом думаете?

Я скорее всего так буду подгружать свой блог на https://denis-skripnik.name/

  • Header, sidebar и footer с технического аккаунта @golos-site или подобного;
  • А в head секции и контентной части будет загружаться контент из моего блога @denis-skripnik.

Буду рад очень комментариям, апвоутам и репостам. Хочется Голос видеть и в качестве платформы для хранения страниц коммерческих (и не только) сайтов.

P. S. Подобную схему, думаю, можно реализовать и в Steem. Так что если Голос эксплуатировать не хотите, можно воздействовать на блокчейн Steem.

7
87.014 GOLOS
На Golos с August 2017
Комментарии (21)
Сортировать по:
Сначала старые