RSS   Twitter   Copiny   Copiny
Нашел ошибку? 

Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!

Создание MVC компонента Joomla 1.5 - Шаг 1, Основы

Создание Компонента - Hello World

Для нашего простейшего компонента потребуется создать всего пять файлов:

  • hello.php - точка входа в компонент
  • controller.php - содержит основное управление компонентом
  • views/hello/view.html.php - обрабатывает данные и передает их в шаблон для вывода
  • views/hello/tmpl/default.php - шаблон для вывода данных
  • hello.xml- XML служит для передачи инструкций для Joomla по установке компонента

Joomla всегда обрабатывает ссылку в корневом файле index.php для страниц Front End (сайт) или administrator/index.php для страниц Back End (панель администратора). Функция обработки URL загрузит требуемый компонент, основанный на значении "option" в URL (метод GET) или переданных данных методом POST.

Для нашего компонента, URL выглядит так:

index.php?option=com_hello&view=hello

Эта ссылка запустит выполнение файла, являющего точкой входа в наш компонент: components/com_hello/hello.php.

Код для этого файла довольно типичен для всех компонентов.

<?php
/**
 * @package    Autor
 * @subpackage Components
 * components/com_hello/hello.php
 * @link http://autor.net/
 * @license    GNU/GPL
*/

// Защита от прямого обращения к скрипту
defined( '_JEXEC' ) or die( 'Restricted access' );

// Подключение файла контроллера.
require_once( JPATH_COMPONENT.DS.'controller.php' );

// Проверка или требуется определенный контроллер
if($controller = JRequest::getVar( 'controller' )) {
    require_once( JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php' );
}

// Создание класса нашего компонента
$classname    = 'HelloController'.$controller;
$controller   = new $classname( );

// Выполнить задачу запроса
$controller->execute( JRequest::getVar( 'task' ) );

// Переадресация
$controller->redirect();
?>

Стоит заметить, что

JPATH_COMPONENT - это абсолютный путь к текущему компоненту, в нашем случае components/com_hello.

JPATH_COMPONENT_SITE - Для Front End

JPATH_COMPONENT_ADMINISTRATOR - Для Back End

DS - является автоматическим выбором слеша ( разделителя директорий ) '\' или '/'.

После загрузки основного контроллера проверяется наличие определенного контроллера с последующей загрузкой. В данном случае у нас только основной контроллер. JRequest::getVar() загружает значение переменной из URL или переданной методом POST. Допустим мы имеем адрес следующего вида:

index.php?option=com_hello&controller=controller_name

Тогда можно определить название нашего контроллера следующим образом:

echo JRequest::getVar('controller', 'default');

Мы имеем основной контроллер НelloController в com_hello/controller.php, так же загружаются дополнительные названия контроллера, к примеру: для HelloControllerController1 класс будет объявлен в файле com_hello/controllers/controller1.php 

{Componentname}{Controller}{Controllername} - Такой стандарт упрощает схему многозадачного компонента.

После того, как контроллер создан, мы инструктируем его выполнить задачу, которая определяется переданными параметрами в URL (либо через POST):

index.php?option=com_hello&task=sometask.

Если переменная "task" явно не задана, то по умолчанию выполниться display(), задача которого просто вывести шаблон по умолчанию. Пример стандартных задач - save, edit, new и т. д.

На этом шаге контроллер переадресовывает страницу. Обычно используется для таких задач как save.

Главная точка входа (hello.php) по существу пропускает управление на контроллер, который обрабатывает выполнение задачи, которая была определена в запросе.

создание контроллера

Наш компонент имеет только одну задачу - Hello. Поэтому, контроллер будет очень простой. Никакая манипуляция данных не требуется. Все что необходимо - это загрузить соответствующий вид(view). Остальные возможности контроллера пока пропустим

Код основного контроллера:

<?php
/**
 * @package    Autor
 * @subpackage Components
 * @link http://autor.net/
 * @license    GNU/GPL
 */

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

jimport('joomla.application.component.controller');

/**
 * Hello World Component Controller
 * @package    Joomla.Tutorials
 * @subpackage Components
 */
class HelloController extends JController
{
    /**
     * Method to display the view
     * @access    public
     */
    function display()
    {
        parent::display();
    }

}
?>

Конструктор класса JController всегда будет регистрировать задачу display(). Этот метод сам определит необходимый шаблон и данные которые необходимо загрузить в него. Более того один шаблон может разделяться на уровни(layout), каждый из которых отобразиться при запуске определенной задачи. В нашем случае мы явно не прописываем имя задачи, поэтому (как уже указывалось выше) используется default.

Когда вы создаете пункт меню для вашего компонента, менеджер меню позволит администратору выбирать задачу с которой начинать выполнение компонента. К примеру, для стандартного компонента "Пользователь" (com_user), выбор задач при создании пункта меню будет следующим:

  • Разметка входа по умолчанию
  • Разметка по умолчанию для регистрации
  • Напоминание по умолчанию
  • Разметка по умолчанию для сброса
  • Разметка по умолчанию для пользователя
  • Разметка пользовательской формы

создание вида

Извлекаем необходимые данные и передаем их в шаблон. В этом нам поможет расширенный класс JView и его метод assignRef, с помощью которого мы передаем переменные в шаблон.

<>Пример кода вида:


<?php
/**
 * @package    Autor
 * @subpackage Components
 * @link http://autor.net/
 * @license    GNU/GPL
*/

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.application.component.view');

/**
 * HTML View class for the HelloWorld Component
 *
 * @package    HelloWorld
 */

class HelloViewHello extends JView
{
    function display($tpl = null)
    {
        $greeting = "Hello World!";
        $this->assignRef('greeting', $greeting );
        parent::display($tpl);
    }
}
?>

создание шаблона

Наш шаблон очень прост, мы только отображаем приветствие, которое передавали в view:

<?php // no direct access
defined('_JEXEC') or die('Restricted access'); ?>
<h1><?php echo $this->greeting; ?></h1>

создание файла hello.xml

Можно установить компонент вручную, копирую файлы по FTP протоколу создавая необходимые папки и таблицы в базе данных, но лучшим вариантом является использования установочного файла для пакетной загрузки файлов и установки компонента

  • детали о компоненте и о авторе компонента.
  • список файлов, которые должны быть скопированы.
  • внешний PHP файл, который исполняет дополнительную установку и деинсталлирует операции.
  • внешние SQL файлы, которые содержит запросы к базе данных, отдельно для установки и удаления

Формат XML файла следующий:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE install SYSTEM "http://dev.joomla.org/xml/1.5/component-install.dtd">
<install type="component" version="1.5.0">
    <name>Hello</name>
    <!-- Далее идут элементы, которые содержат не обязательные данные,
         но тем не менее их желательно заполнить -->
    <creationDate>2007 02 22</creationDate>
    <author>John Doe</author>
    <authorEmail>john.doe@example.org</authorEmail>
    <authorUrl>http://www.example.org</authorUrl>
    <copyright>Copyright Info</copyright>
    <license>License Info</license>
    <!--  Версия компонента, может использоваться для обновлений -->
    <version>Component Version String</version>
    <!-- Краткое описание возможностей компонента -->
    <description>Description of the component ...</description>

    <!-- Опции копирования файлов при установке -->
    <files folder="cite">
        <filename>index.html</filename>
        <filename>hello.php</filename>
        <filename>controller.php</filename>
        <filename>views/index.html</filename>
        <filename>views/hello/index.html</filename>
        <filename>views/hello/view.html.php</filename>
        <filename>views/hello/tmpl/index.html</filename>
        <filename>views/hello/tmpl/default.php</filename>
    </files>

    <administration>
        <!-- Имя пункта меню в панели управления -->
        <menu>Hello World!</menu>

        <!-- Файлы для копирования в панель администратора -->
        <files folder="administrator">
            <filename>index.html</filename>
            <filename>admin.hello.php</filename>
        </files>  
    </administration>
</install>

Также есть файл, который будет скопирован, это - index.html.

index.html помещен в каждый каталог, чтобы препятствовать пользователям получать список файлов каталога. Эти файлы содержат одну единственную строку:

<html><body bgcolor="#FFFFFF"></body></html>

Прикрепленные файлы:
com_hello_1.zip
Объем: 4.27 KB; Тип: zip; Загрузок: 3099; в сутки: ~1; Обновлен: 16:19, 24 Июля 2011;
Смотрите также:
Комментарии (64) Добавить комментарий
  • Алексей
    Алексей
    13 Апреля 2011, 18:21
     ↑  0  ↓     ответ

    Так этот компонент не устанавливается. joomla ошибку выдаёт:

    JInstaller::install: Файл /home/c/cl38835/public_html/test/tmp/install_4da58646ed63f/hello.php не существует

    Может я не правильно что-то понимаю:

    Этот файл com_hello_1.zip мы можем установить в joomla как полноценный компонент?

    у меня joomla 1.5.22 может это влияет

    • smet.denis
      smet.denis (админ)
      17 Апреля 2011, 13:37
       ↑  -4  ↓     ответ

      у вас уже установлен модуль com_hello, удалите его и попробуйте снова...

      • Николай
        Николай
        25 Апреля 2011, 18:27
         ↑  0  ↓     ответ

        вы не правы

        не правильно написан xml файл

        обратите внимание на имена папок

        • smet.denis
          smet.denis (админ)
          25 Апреля 2011, 18:39
           ↑  0  ↓     ответ

          Ок, поглядим.

  • Severin
    Severin
    25 Мая 2011, 22:46
     ↑  +3  ↓     ответ

    В установочном xml нужно отредактировать строки <files folder="">. Должно быть

    <files folder="cite"> для файлов фронт-энда

    <files folder="administrator"> для файлов бек-энда

    • smet.denis
      smet.denis (админ)
      26 Мая 2011, 04:32
       ↑  -3  ↓     ответ

      Спасибо за наводку. Исправлено.

    • Николай
      Николай
      23 Ноября 2012, 17:12
       ↑  +2  ↓     ответ

      Может стоит написать всё-таки SITE?

      web-разработчик, а ка "сайт" пишется, не знает...

  • Александр
    Александр
    15 Июля 2011, 18:34
     ↑  0  ↓     ответ

    Не исправлено.

    Этот компонент по прежнему не устанавливается.

    Joomla 1.5.22

    Ошибка! Не найден XML-файл установки Joomla!

  • snake
    snake
    22 Октября 2011, 14:54
     ↑  +2  ↓     ответ

    По переданной ссылке типа «index.php?option=com_hello&view=hello»

    Подгружается файл hello.php и ему передается управление, тот исходя из значения переменной $controller инклудит соответственный файл php.

    Создает объект класса и вызывает метод execute() передав ему значение переменной task из get или post.

    Метод execute нашего контроллера, унаследован из класса родителя и вызывает метод display(), который мы переопредилили в нашем классе (и на самом деле он тупо вызывает метод display() родителя). До этого места все понятно и логично, видно что откуда грузиться.

    А вот дальше пошел полный «алес»… Мы описываем потомка от класса JView в котором, переопределяем метод display() который как написано в статье передает переменные в шаблон. Вопрос, а где прописано, какой именно php файл является шаблоном. В файле с описанием класса просмотра HelloViewHello нигде не указанно что надо погружать именно файл \com_hello\site\views\hello\tmpl\default.php. Да и собственно говоря, в классе с контроллером мы тоже не указываем какой именно php файл содержит описание класса наследника от JView. Да и нет ни где создания объекта класса HelloViewHello.

    Нельзя ли подробнее пояснить откуда тут что берется?

    • Игорь
      Игорь
      04 Декабря 2011, 01:36
       ↑  0  ↓     ответ

      snake зачем такие вопросы задаешь? Парни просто передрали чужую статью))

      • icewind
        icewind
        27 Апреля 2012, 05:30
         ↑  0  ↓     ответ

        точно передрали

        Вот еще в 2007 году были опубликованы уроки по созданию компонента:

        webflasher.net/ru/webmasteru/joomla-1-5.html

    • zemelea
      zemelea
      22 Марта 2012, 03:43
       ↑  0  ↓     ответ

      В нашем случае мы явно не прописываем имя задачи, поэтому (как уже указывалось выше) используется default.

  • mak
    mak
    31 Марта 2012, 13:14
     ↑  +3  ↓     ответ

    А как заставить вьюхи зацепляться из файлов *.phtml ?

  • JeneZis
    JeneZis
    23 Мая 2012, 19:33
     ↑  0  ↓     ответ

    Для установки данного компонента необходимо

    1. исправить в файле install.xml строку 36:

    <files folder="admin">

    на следующую:

    <files folder="administrator">

    2. Переименовать папку admin в administrator

    3. Дать права на запись директории components

  • Артем
    Артем
    06 Февраля 2013, 04:16
     ↑  +1  ↓     ответ

    if($controller = JRequest::getVar( 'controller' )) {

    там не двойное равно разве?

    • Стас
      Стас
      31 Января 2014, 14:11
       ↑  0  ↓     ответ

      JRequest::getVar( 'controller' ) в случае неудачи вернет false

  • Sergio
    Sergio
    27 Марта 2014, 04:07
     ↑  0  ↓     ответ

    Вы уверены в том, что front-end это сайт, а back-end это панель администратора?

  • Theda
    Theda
    04 Сентября 2017, 06:25
     ↑  0  ↓     ответ

    Today, I went to the beach front with my children. I found a sea shell

    and gave it to my 4 year old daughter and said "You can hear the ocean if you put this to your ear."

    She placed the shell to her ear and screamed. There was a hermit crab inside

    and it pinched her ear. She never wants to go back!

    LoL I know this is completely off topic but I

    had to tell someone!

  • продвижение сайта сео 
    продвижение сайта сео 
    23 Мая 2019, 12:06
     ↑  0  ↓     ответ

    По сути, вот вам и готовое семантическое ядро сайта.

  • Platinumselection.net
    Platinumselection.net
    12 Июля 2019, 21:05
     ↑  0  ↓     ответ

    Some male es?orts promote thеіr solutіons on-line.

  • harga burung rengganis
    harga burung rengganis
    06 Ноября 2019, 04:03
     ↑  0  ↓     ответ

    Основы создания простейшего компонента

    для Joomla 1.5 / Создание компонентов .:

    . Документация Joomla! CMS https://soal2online.blogspot.com/2019/10/bandar-togel-hongkong-aman-dan.html

  • lady escorts in singapore
    lady escorts in singapore
    10 Ноября 2019, 10:14
     ↑  0  ↓     ответ

    Escoгt girls do nnot cime low-priced іn Singapore.

  • plenty of fish dating site
    plenty of fish dating site
    12 Ноября 2019, 09:09
     ↑  0  ↓     ответ

    If some one wants expert view concerning blogging then i advise him/her

    to pay a quick visit this weblog, Keep up the fastidious work.

  • coconut oil there
    coconut oil there
    16 Ноября 2019, 11:33
     ↑  0  ↓     ответ

    Pretty section of content. I just stumbled upon your site and

    in accession capital to assert that I get in fact

    enjoyed account your blog posts. Anyway I will be subscribing to your augment and even I achievement you access consistently rapidly.

  • tinyurl.com
    tinyurl.com
    21 Ноября 2019, 08:43
     ↑  0  ↓     ответ

    Everything is very open with a really clear description of the issues.

    It was really informative. Your site is very useful. Thank

    you for sharing!

  • http://tinyurl.com/
    http://tinyurl.com/
    22 Ноября 2019, 08:36
     ↑  0  ↓     ответ

    Hello there, just became aware of your blog through Google, and found that it's truly informative.

    I'm gonna watch out for brussels. I will be grateful if you continue this in future.

    Many people will be benefited from your writing. Cheers!

  • tinyurl.com
    tinyurl.com
    24 Ноября 2019, 08:35
     ↑  0  ↓     ответ

    Thanks for the auspicious writeup. It in fact was a enjoyment account it.

    Glance advanced to more delivered agreeable from you! By the way, how can we keep up a

    correspondence?

  • tinyurl.com
    tinyurl.com
    24 Ноября 2019, 10:14
     ↑  0  ↓     ответ

    Does your blog have a contact page? I'm having trouble locating it but, I'd

    like to send you an e-mail. I've got some suggestions for your blog you

    might be interested in hearing. Either way, great site and I look

    forward to seeing it expand over time.

  • http://tinyurl.com
    http://tinyurl.com
    24 Ноября 2019, 13:36
     ↑  0  ↓     ответ

    Great site you have here but I was wondering if you knew of

    any community forums that cover the same topics talked about here?

    I'd really love to be a part of online community where I can get comments from other

    knowledgeable people that share the same interest.

    If you have any suggestions, please let me know. Cheers!

  • coconut oil there
    coconut oil there
    26 Ноября 2019, 03:37
     ↑  0  ↓     ответ

    I believe this is one of the most significant information for me.

    And i'm satisfied reading your article. But wanna remark on some normal issues, The website taste is great, the articles is in point of fact great : D.

    Excellent activity, cheers

  • off coconut oil
    off coconut oil
    26 Ноября 2019, 04:56
     ↑  0  ↓     ответ

    Hey! I could have sworn I've been to this blog before but after reading through

    some of the post I realized it's new to me.

    Anyhow, I'm definitely delighted I found it and I'll be book-marking and checking back often!

  • plenty of fish dating site
    plenty of fish dating site
    26 Ноября 2019, 13:38
     ↑  0  ↓     ответ

    It's not my first time to pay a visit this

    website, i am visiting this web site dailly and take good data from

    here all the time.

  • plenty of fish dating site
    plenty of fish dating site
    27 Ноября 2019, 00:15
     ↑  0  ↓     ответ

    Hello, this weekend is good for me, because this moment i am reading this

    wonderful informative piece of writing here at my residence.

  • ipad 2 mobile legends crash
    ipad 2 mobile legends crash
    25 Декабря 2019, 04:08
     ↑  0  ↓     ответ

    Hi there would you mind letting me know which web host you're utilizing?

    I've loaded your blog in 3 completely different web browsers and I must say this blog

    loads a lot quicker then most. Can you recommend

    a good web hosting provider at a honest price? Thanks a lot, I appreciate it!

  • mobile legends draft pick
    mobile legends draft pick
    27 Декабря 2019, 10:52
     ↑  0  ↓     ответ

    It's going to be ending of mine day, except before finish I am reading this impressive post to increase my experience.

  • star 8 mobile legend
    star 8 mobile legend
    05 Января 2020, 08:05
     ↑  0  ↓     ответ

    Hi there! I just would like to offer you a big thumbs

    up for your excellent information you have got right here on this post.

    I'll be coming back to your blog for more soon.

  • https://bunga-escorts.com/paris-escorts/russian
    https://bunga-escorts.com/paris-escorts/russian
    13 Февраля 2020, 15:35
     ↑  0  ↓     ответ

    All attractive escort girls Paris ??е discreet ?nd specialist.

  • Korny cyrkonowe
    Korny cyrkonowe
    19 Февраля 2020, 15:43
     ↑  0  ↓     ответ

    Hi, yeah this piece of writing is truly good and I have learned lot of things from it on the topic of

    blogging. thanks.

  • mobile legends
    mobile legends
    27 Февраля 2020, 19:33
     ↑  0  ↓     ответ

    Yes! Finally something about mobile legends.

  • what is search engine optimisation marketing
    what is search engine optimisation marketing
    23 Марта 2020, 11:05
     ↑  0  ↓     ответ

    Seo stands f?r Search Engine Optimisation.

  • escorte girl paris 16
    escorte girl paris 16
    23 Марта 2020, 17:07
     ↑  0  ↓     ответ

    We ?re glad t? offer ??u ?n elite escort in Paris.

  • ?????
    ?????
    27 Марта 2020, 23:56
     ↑  0  ↓     ответ

    Quality posts is the secret to invite the visitors to pay a quick visit the web page,

    that's what this website is providing. https://1borsa.com/328938

  • fleck 5600 valve replacement
    fleck 5600 valve replacement
    04 Апреля 2020, 15:12
     ↑  0  ↓     ответ

    It's an amazing post designed for all the internet visitors; they will

    take benefit from it I am sure.

  • ??????
    ??????
    27 Апреля 2020, 20:51
     ↑  0  ↓     ответ

    Useful information. Fortunate me I found your site accidentally,

    and I'm stunned why this accident didn't came about earlier!

    I bookmarked it. https://ylnepal.com/forum/question/correct-purchase-process-of-grinding-mill/

  • ??????
    ??????
    01 Мая 2020, 00:50
     ↑  0  ↓     ответ

    There is certainly a great deal to find out about this issue.

    I love all the points you have made. middleagedonlinemarketer.com/2020/04/assessment-on-cosrx-centella-water-alcohol-free-toner/

  • Agen Domino
    Agen Domino
    30 Мая 2020, 14:11
     ↑  0  ↓     ответ

    Piece of writing writing is also a excitement, if you know then you

    can write or else it is complicated to write.

  • trucker load
    trucker load
    07 Июня 2020, 06:18
     ↑  0  ↓     ответ

    Hello! Would you mind if I share your blog

    with my twitter group? There's a lot of people that I think would

    really appreciate your content. Please let me

    know. Cheers

  • ganasqq.mystrikingly.com
    ganasqq.mystrikingly.com
    09 Июня 2020, 04:39
     ↑  0  ↓     ответ

    Just want to say your article is as surprising. The clearness in your post

    is just nice and that i could suppose you're knowledgeable on this subject.

    Fine with your permission allow me to grasp your feed to stay up to date with approaching post.

    Thanks 1,000,000 and please carry on the rewarding work.

  • Situs bandarq
    Situs bandarq
    11 Июня 2020, 14:20
     ↑  0  ↓     ответ

    You could certainly see your expertise in the work you

    write. The sector hopes for even more passionate writers such as you who are not afraid to mention how they believe.

    Always follow your heart.

  • judi online terpercaya
    judi online terpercaya
    15 Июня 2020, 06:39
     ↑  0  ↓     ответ

    Hi mates, its fantastic post about cultureand fully explained, keep it up all the time.

  • Situs Poker
    Situs Poker
    16 Июня 2020, 01:59
     ↑  0  ↓     ответ

    I know this if off topic but I'm looking into starting my own weblog and was

    wondering what all is required to get setup? I'm assuming having a blog like yours would cost a pretty

    penny? I'm not very web smart so I'm not 100% positive.

    Any tips or advice would be greatly appreciated.

    Thank you

  • g
    g
    16 Июня 2020, 05:39
     ↑  0  ↓     ответ

    Howdy! This blog post could not be written much better! Reading through this post reminds

    me of my previous roommate! He constantly kept preaching

    about this. I will forward this article to

    him. Fairly certain he will have a very good read. Thanks for

    sharing!

  • g
    g
    17 Июня 2020, 05:57
     ↑  0  ↓     ответ

    Hello i am kavin, its my first occasion to commenting anyplace,

    when i read this piece of writing i thought i could also create comment due to this good

    piece of writing.

  • Judi Domino
    Judi Domino
    18 Июня 2020, 08:07
     ↑  0  ↓     ответ

    I got this web site from my pal who shared with me regarding this website and at

    the moment this time I am browsing this website and reading

    very informative articles at this time.

  • http://vossappel2.nation2.Com/langkah-terbaik-untuk-bersua-situs-kekinian
    http://vossappel2.nation2.Com/langkah-terbaik-untuk-bersua-situs-kekinian
    18 Июня 2020, 15:42
     ↑  0  ↓     ответ

    Having read this I believed it was extremely enlightening.

    I appreciate you finding the time and effort to put this content together.

    I once again find myself spending a lot of time both reading and posting comments.

    But so what, it was still worth it!

  • agen Bandarq
    agen Bandarq
    21 Июня 2020, 05:28
     ↑  0  ↓     ответ

    It's impressive that you are getting ideas from

    this article as well as from our argument made

    at this time.

  • Agen Domino
    Agen Domino
    22 Июня 2020, 22:57
     ↑  0  ↓     ответ

    I was recommended this web site by means of

    my cousin. I'm no longer sure whether this put up is written via him as no one else understand such specific approximately

    my problem. You are incredible! Thanks!

  • Bandar Judi Online
    Bandar Judi Online
    23 Июня 2020, 10:07
     ↑  0  ↓     ответ

    Hi there friends, fastidious paragraph and good urging commented

    here, I am genuinely enjoying by these.

  • Agen domino
    Agen domino
    29 Июня 2020, 10:16
     ↑  0  ↓     ответ

    Pretty part of content. I simply stumbled upon your

    blog and in accession capital to assert that I get in fact

    loved account your blog posts. Anyway I'll be subscribing to your feeds or even I success you get

    admission to constantly quickly.

  • Situs Domino
    Situs Domino
    04 Июля 2020, 12:28
     ↑  0  ↓     ответ

    Thank you for sharing your info. I truly appreciate your efforts and

    I am waiting for your further write ups thank you once

    again.

  • ted.com
    ted.com
    09 Июля 2020, 07:36
     ↑  0  ↓     ответ

    I am actually happy to read this webpage posts which includes tons of helpful data, thanks for providing these

    statistics.

  • Dominoqq Online
    Dominoqq Online
    15 Июля 2020, 04:40
     ↑  0  ↓     ответ

    Hi there fantastic blog! Does running a blog similar to this take a

    large amount of work? I have virtually no understanding of computer programming

    but I was hoping to start my own blog in the near future.

    Anyways, if you have any suggestions or tips for new blog owners please share.

    I understand this is off subject nevertheless I simply had to ask.

    Thanks!

  • web hosting company
    web hosting company
    09 Августа 2020, 06:19
     ↑  0  ↓     ответ

    I quite like reading an article that will make people think.

    Also, many thanks for permitting me to comment!

  • best web hosting
    best web hosting
    09 Августа 2020, 08:56
     ↑  0  ↓     ответ

    My spouse and I absolutely love your blog and find almost all of your post's to be precisely what I'm looking for.

    Does one offer guest writers to write content in your case?

    I wouldn't mind publishing a post or elaborating on a

    few of the subjects you write about here. Again, awesome

    site!

Оставить комментарий




* обязательно для заполнения

1 введенный почтовый адрес используется только для обратной связи при ответах в комментариях и сервиса gravatar.com
.