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

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

Создание MVC компонента Joomla 1.5 - Шаг 6, добавляем действия к Модели

Создание, сохранение, удаление, обновление элементов базы данных - CRUD

Итак, наш контроллер выполняет только две задачи: создание и изменение. Однако у нас есть кнопки также для сохранения, удаления записей, и отмены. Нужно написать соответствующий код для выполнения этих задач.

Сохранение записи

Следующим шагом логично будет реализовать сохранение записи. Это потребует использование выбора для обработки различных ситуаций, например, различия между созданием новой записи (запрос INSERT), и обновлением существующей записи (запрос UPDATE). Также существует несколько нюансов, связанных с получением данных из формы и помещения их в запрос.

Фреймворк Joomla! облегчает выполнение многих задач. Класс JTable упрощает управление записями в базе данных без необходимости заботится о написании SQL-кода, лежащего в основе этих операций. Он также облегчает перенос данных из HTML-форм в базу данных.

Создание класса Table

Класс JTable является абстрактным классом, от которого можно получить производные классы для работы с конкретными таблицами. Для его использования нужно просто создать класс, расширяющий класс JTable, добавить поля вашей базы данных как свойства, и переназначить конструктор для указания имени таблицы и первичного ключа.

Вот как выглядит наш класс JTable:

<?php
/**
 * Hello World table class
 * 
 * @package    Joomla.Tutorials
 * @subpackage Components
 * @link http://dev.joomla.org/
 * @license        GNU/GPL
 */

// No direct access
defined('_JEXEC') or die('Доступ ограничен!');

/**
 * Hello Table class
 *
 * @package    Joomla.Tutorials
 * @subpackage Components
 */
class TableHello extends JTable
{
    /**
     * Primary Key
     *
     * @var int
     */
    var $id = null;

    /**
     * @var string
     */
    var $greeting = null;

    /**
     * Constructor
     *
     * @param object Database connector object
     */
    function TableHello($db) {
        parent::__construct('#__hello', 'id', $db);
    }
}
?>

Как видите, здесь мы определили два поля: идентификатор и приветствие. Затем был определен конструктор, вызывающий конструктор родительского класса и передающий ему имя таблицы (#__hello), имя поля, являющегося первичным ключом (id), и объект коннектора базы данных.

Этот файл следует назвать hello.php и поместить в каталог tables в администраторском разделе нашего компонента.

Реализация функций в нашей модели

Теперь мы готовы добавить метод в модель для сохранения записи. Назовем этот метод store. Метод store() будет выполнять три вещи: помещать данные из формы в объект TableHello, проверять корректность сформированной записи и сохранять запись в базе данных.

Метод будет выглядеть так:

/**
 * Method to store a record
 *
 * @access    public
 * @return    boolean    True on success
 */
function store()
{
    $row => $this->getTable();

    $data = JRequest::get( 'post' );
    // Bind the form fields to the hello table
    if (!$row->bind($data)) {
        $this->setError($this->_db->getErrorMsg());
        return false;
    }

    // Make sure the hello record is valid
    if (!$row->check()) {
        $this->setError($this->_db->getErrorMsg());
        return false;
    }

    // Store the web link table to the database
    if (!$row->store()) {
        $this->setError($this->_db->getErrorMsg());
        return false;
    }

    return true;
}

Этот метод добавляется в модель hello.

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

Первая строка получает ссылку на объект JTable. Если таблица названа правильно, мы можем не указывать это имя - класс JModel знает, где его искать. Как вы помните, мы назвали наш класс таблицы TableHello и поместили его в файл hello.php в каталоге tables. Если вы следовали этим рекомендациям, класс JModel создаст объект автоматически.

Вторая строка получает данные из формы. Класс JRequest делает эту операцию очень легкой. В данном случае мы получаем все переменные, переданные с помощью метода POST. Они возвращаются в виде ассоциативного массива.

Остальное просто - мы получаем, проверяем и сохраняем. Метод bind() копирует значения из массива в соответствующие свойства объекта таблицы. В данном случае он копирует значения идентификатора и приветствия в объект TableHello.

Метод check() выполняет проверку данных. В классе JTable() этот метод просто возвращает true. Пока он не представляет какого-либо значения, но в будущем он позволит проверять данные с помощью класса TableHello. Этот метод может быть переназначен в классе TableHello методом, выполняющим необходимые проверки.

Метод store() будет помещать данные из объекта в базу данных. Если id равно нулю, будет создана новая запись (INSERT), в противном случае он обновит существующую запись (UPDATE).

Добавление задачи в контроллер

Теперь все готово для добавления задачи в контроллер. Поскольку задача называется save, мы должны назвать метод "save". Это просто:

/**
 * save a record (and redirect to main page)
 * @return void
 */
function save()
{
    $model = $this->getModel('hello');

    if ($model->store()) {
        $msg = JText::_( 'Greeting Saved!' );
    } else {
        $msg = JText::_( 'Error Saving Greeting' );
    }

    // Check the table in so it can be edited.... we are done with it anyway
    $link = 'index.php?option=com_hello';
    $this->setRedirect($link, $msg);
}

Все, что нам нужно - вызвать метод store() модели. Затем следует использовать метод setRedirect() для перенаправления к списку приветствий. Также мы задаем сообщение, которое будет отображено вверху страницы.

Удаление записи

Реализация функции в модели

В модели мы получаем список ID для удаления и вызываем класс JTable для их удаления:

/**
 * Method to delete record(s)
 *
 * @access    public
 * @return    boolean    True on success
 */
function delete()
{
    $cids = JRequest::getVar( 'cid', array(0), 'post', 'array' );
    $row => $this->getTable();

    foreach($cids as $cid) {
        if (!$row->delete( $cid )) {
            $this->setError( $row->getErrorMsg() );
            return false;
        }
    }                        

    return true;
}

Мы вызываем метод JRequest::getVar() для получения данных из запроса, затем вызываем метод delete() для удаления каждой строки. Сохраняя ошибки в модели, мы обеспечиваем возможность получить их позже, если потребуется.

Выполнение задачи удаления в контроллере

Это очень похоже на метод save(), выполняющий сохранение:

/**
 * remove record(s)
 * @return void
 */
function remove()
{
    $model = $this->getModel('hello');
    if(!$model->delete()) {
        $msg = JText::_( 'Error: One or More Greetings Could not be Deleted' );
    } else {
        $msg = JText::_( 'Greeting(s) Deleted' );
    }

    $this->setRedirect( 'index.php?option=com_hello', $msg );
}

Отмена операции редактирования

Все, что нужно для прерывания операции редактирования - перенаправление на главное представление:

/**
 * cancel editing a record
 * @return void
 */
function cancel()
{
    $msg = JText::_( 'Operation Cancelled' );
    $this->setRedirect( 'index.php?option=com_hello', $msg );
}

Заключение

Мы реализовали простой механизм для нашего компонента. Теперь у нас есть возможность редактировать элементы, отображаемые в представлении. Мы продемонстрировали взаимодействие между моделями, представлениями и контроллерами. Также мы показали, как класс JTable можно расширить для предоставления простого доступа к таблицам в базе данных. Также можно увидеть использование класса JToolBarHelper для создание панелей кнопок в компоненте для предоставления стандартного вида для различных компонентов.

Прикрепленные файлы:
com_hello_6.zip
Объем: 14.84 KB; Тип: zip; Загрузок: 2000; в сутки: ~1; Обновлен: 14:19, 24 Июля 2011;
Смотрите также:
Комментарии (67) Добавить комментарий
  • andrey
    andrey
    04 Августа 2011, 02:47
     ↑  0  ↓     ответ

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

    • smet.denis
      smet.denis (админ)
      04 Августа 2011, 03:37
       ↑  +3  ↓     ответ

      Да, без проблем, а что вам мешает?)

      • andrey
        andrey
        04 Августа 2011, 14:47
         ↑  0  ↓     ответ

        Незнание. Подскажите как добавить поле (старт.номер к примеру). Добавить поле в таблицу БД, а где еще что прописать?

  • Владимир
    Владимир
    31 Августа 2011, 04:36
     ↑  0  ↓     ответ

    В данном примере рассматривается добавление только одной записи в базу, а если нужно добавить сразу несколько полей? Подскажите какие файлы и как нужно поменять?

  • Андрей
    Андрей
    01 Сентября 2011, 01:41
     ↑  -2  ↓     ответ

    Привет,

    я тоже столкнулся с такой проблемой, нуждаюсь в вашей помощи если вы в силах помочь

  • Владимир
    Владимир
    09 Сентября 2011, 00:44
     ↑  0  ↓     ответ

    А почему когда создаешь пункт в меню он не отображается в списке типов пункта меню? Как его создать в меню???

  • Сергей
    Сергей
    11 Сентября 2011, 19:22
     ↑  0  ↓     ответ

    Почему-то не работает кнопка создания новой записи, выкидывает ошибку = Компонент не найден :(

    Что я не так сделал?

    • Сергей
      Сергей
      11 Сентября 2011, 20:26
       ↑  0  ↓     ответ

      Забыл поменять скрытое поле в шаблоне

      <input type="hidden" name="option" value="com_hello" />

      на свое значение, из-за это он не находил необходимого компонента :)

  • torrenthot
    torrenthot
    24 Ноября 2011, 03:05
     ↑  +2  ↓     ответ

    Благодарю за статью, однако стоит отметить что вы забыли про то как вызвать модуль из меню..

    ведь вы явно не хотите чтобы начинающие строители модулей для джумлы вставляли в меню ссылки типа... test.torrenthot.com/index.php?option=com_hello&view=hello

  • Андрей
    Андрей
    25 Ноября 2011, 19:35
     ↑  0  ↓     ответ

    Сергей, очень актуальный вопрос: как вызвать модуль из меню?

    Спасибо

    • startom
      startom
      29 Ноября 2011, 13:18
       ↑  0  ↓     ответ

      Вот здесь все четко написано:

      goldensites.su/articles-joomla-16/sozdanie-komponenta-joomla-16-chast-3-dobavlyaem-tip-punkta-menyu

  • Александр
    Александр
    12 Апреля 2012, 14:50
     ↑  +1  ↓     ответ

    А как проще можно сделать, чтоб элементы в админке сразу списком выводились, а не переходить для редактирования по ссылке? У меня что-то не получается.

  • download
    download
    15 Августа 2019, 06:23
     ↑  0  ↓     ответ

    I wanted to thank you for this fantastic read!! I absolutely loved every little bit of it.

    I've got you book marked to check out new things you post…

  • /development/creating-component/mvc-joomla-1-5-of-step-6-to-add-actions-to-the-model
    /development/creating-component/mvc-joomla-1-5-of-step-6-to-add-actions-to-the-model
    10 Октября 2019, 20:31
     ↑  0  ↓     ответ

    Hmm it seems like your blog ate my first comment

    (it was super long) so I guess I'll just sum it up what I had written and say, I'm thoroughly enjoying

    your blog. I too am an aspiring blog writer but I'm still new to everything.

    Do you have any suggestions for rookie blog writers?

    I'd really appreciate it.

  • coconut oil with
    coconut oil with
    16 Ноября 2019, 10:24
     ↑  0  ↓     ответ

    Undeniably believe that which you said. Your favorite reason seemed to

    be on the net the easiest thing to be aware of. I say to you,

    I certainly get annoyed while people think about worries that they plainly do not know about.

    You managed to hit the nail upon the top and defined out the whole thing without

    having side-effects , people can take a signal.

    Will likely be back to get more. Thanks

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

    constantly i used to read smaller content which also clear their motive, and that is

    also happening with this article which I am reading at this time.

  • http://tinyurl.com
    http://tinyurl.com
    23 Ноября 2019, 16:30
     ↑  0  ↓     ответ

    I all the time emailed this website post page to

    all my associates, since if like to read it next my friends

    will too.

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

    It's impressive that you are getting thoughts from this piece of writing as well

    as from our argument made at this time.

  • http://tinyurl.com/quest-bars-cheap-85497
    http://tinyurl.com/quest-bars-cheap-85497
    24 Ноября 2019, 04:04
     ↑  0  ↓     ответ

    I like the valuable info you supply on your articles.

    I will bookmark your blog and take a look at

    once more right here frequently. I'm fairly certain I'll be told plenty of new stuff right right here!

    Best of luck for the following!

  • tinyurl.com
    tinyurl.com
    25 Ноября 2019, 04:23
     ↑  0  ↓     ответ

    I just could not leave your site before suggesting that I actually enjoyed the usual info a person provide for your guests?

    Is going to be back frequently in order to check up on new posts

  • http://tinyurl.com
    http://tinyurl.com
    25 Ноября 2019, 04:42
     ↑  0  ↓     ответ

    Hi i am kavin, its my first time to commenting

    anywhere, when i read this post i thought i could also make

    comment due to this brilliant paragraph.

  • tinyurl.com
    tinyurl.com
    25 Ноября 2019, 06:34
     ↑  0  ↓     ответ

    My coder is trying to convince me to move to

    .net from PHP. I have always disliked the idea because

    of the expenses. But he's tryiong none the less. I've been using

    Movable-type on several websites for about a year

    and am anxious about switching to another platform. I have heard excellent things about blogengine.net.

    Is there a way I can transfer all my wordpress posts into it?

    Any help would be greatly appreciated!

  • when coconut oil
    when coconut oil
    25 Ноября 2019, 15:10
     ↑  0  ↓     ответ

    Hi there colleagues, its impressive paragraph on the topic of cultureand completely

    explained, keep it up all the time.

  • the coconut oil
    the coconut oil
    25 Ноября 2019, 19:18
     ↑  0  ↓     ответ

    Its such as you learn my thoughts! You appear to know a lot approximately this, like you wrote the e-book

    in it or something. I feel that you can do with some percent to pressure

    the message house a little bit, however other than that, that is fantastic blog.

    A fantastic read. I'll certainly be back.

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

    hi!,I really like your writing very a lot! proportion we keep in touch extra approximately your post on AOL?

    I require an expert in this house to unravel my problem.

    Maybe that is you! Looking ahead to look you.

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

    I have read a few good stuff here. Definitely price bookmarking

    for revisiting. I surprise how so much effort you put to

    make any such magnificent informative web site.

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

    When I originally commented I appear to have clicked the

    -Notify me when new comments are added- checkbox and from now on every time a

    comment is added I recieve four emails with

    the same comment. Perhaps there is a means you can remove me from that

    service? Thanks a lot!

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

    This paragraph provides clear idea designed for the new people of blogging, that truly how to do blogging and site-building.

  • ps4 games
    ps4 games
    28 Ноября 2019, 18:11
     ↑  0  ↓     ответ

    Hi to every body, it's my first go to see of this web site; this webpage carries amazing and truly excellent data designed for visitors.

  • quest bars cheap
    quest bars cheap
    30 Ноября 2019, 12:17
     ↑  0  ↓     ответ

    Hello everyone, it's my first pay a visit at this site, and article is really

    fruitful in support of me, keep up posting these types of content.

  • quest bars cheap
    quest bars cheap
    02 Декабря 2019, 09:54
     ↑  0  ↓     ответ

    With havin so much content and articles do you ever run into any issues of plagorism or copyright violation? My website has a lot of unique content

    I've either written myself or outsourced but it

    appears a lot of it is popping it up all over the

    internet without my permission. Do you know any techniques to

    help reduce content from being stolen? I'd certainly appreciate it.

  • quest bars cheap
    quest bars cheap
    02 Декабря 2019, 10:58
     ↑  0  ↓     ответ

    For most up-to-date information you have to go to see world wide web and on web I

    found this site as a best web page for hottest

    updates.

  • ps4 games
    ps4 games
    05 Декабря 2019, 09:01
     ↑  0  ↓     ответ

    Please let me know if you're looking for a writer for your weblog.

    You have some really great articles and I think I would

    be a good asset. If you ever want to take some of the load off, I'd really like to

    write some material for your blog in exchange for a link back to mine.

    Please blast me an email if interested. Cheers!

  • ps4 games
    ps4 games
    06 Декабря 2019, 13:32
     ↑  0  ↓     ответ

    Hello, I enjoy reading through your post. I wanted to write a little comment to

    support you.

  • ps4 games
    ps4 games
    06 Декабря 2019, 22:14
     ↑  0  ↓     ответ

    If some one wishes to be updated with most up-to-date technologies afterward he must be go to see this site and be

    up to date all the time.

  • ps4 games
    ps4 games
    07 Декабря 2019, 06:11
     ↑  0  ↓     ответ

    hello!,I like your writing so a lot! percentage

    we be in contact more about your article on AOL? I need an expert in this house to unravel my problem.

    May be that's you! Having a look forward to peer you.

  • quest bars cheap
    quest bars cheap
    07 Декабря 2019, 15:47
     ↑  0  ↓     ответ

    I’m not that much of a internet reader to be honest but

    your blogs really nice, keep it up! I'll go ahead and bookmark your website to come back in the future.

    Cheers

  • quest bars cheap
    quest bars cheap
    09 Декабря 2019, 18:58
     ↑  0  ↓     ответ

    With havin so much written content do you ever run into any

    problems of plagorism or copyright infringement? My blog has a lot of exclusive content I've

    either created myself or outsourced but it appears a lot

    of it is popping it up all over the web without my authorization. Do you

    know any methods to help protect against content from being stolen? I'd

    truly appreciate it.

  • quest bars cheap
    quest bars cheap
    10 Декабря 2019, 13:43
     ↑  0  ↓     ответ

    great submit, very informative. I ponder why the other experts of this sector don't understand this.

    You must proceed your writing. I'm confident, you have a

    great readers' base already!

  • ps4 games
    ps4 games
    11 Декабря 2019, 08:15
     ↑  0  ↓     ответ

    Good post. I learn something new and challenging on blogs I stumbleupon on a daily

    basis. It's always exciting to read through content from other authors and practice a little something from their websites.

  • ps4 games
    ps4 games
    13 Декабря 2019, 10:24
     ↑  0  ↓     ответ

    Have you ever considered creating an e-book or guest authoring on other sites?

    I have a blog based on the same information you discuss and would really

    like to have you share some stories/information. I know my

    visitors would appreciate your work. If you are even remotely interested,

    feel free to send me an e-mail.

  • coconut oil
    coconut oil
    15 Декабря 2019, 21:37
     ↑  0  ↓     ответ

    Whats up this is somewhat of off topic but I was wanting to know if blogs use WYSIWYG editors or if you have to manually code with HTML.

    I'm starting a blog soon but have no coding know-how so I

    wanted to get advice from someone with experience.

    Any help would be enormously appreciated!

  • coconut oil
    coconut oil
    19 Декабря 2019, 15:41
     ↑  0  ↓     ответ

    Hey there! I know this is somewhat off topic but I was wondering

    which blog platform are you using for this website? I'm getting sick and tired of Wordpress because I've had issues with hackers and I'm looking at alternatives for another platform.

    I would be great if you could point me in the direction of a good platform.

  • how to get help in windows 10
    how to get help in windows 10
    28 Декабря 2019, 12:20
     ↑  0  ↓     ответ

    Good day! This post could not be written any better! Reading through this post reminds me of

    my good old room mate! He always kept talking about this. I will forward this post to him.

    Pretty sure he will have a good read. Thank you for sharing!

  • match.com free trial
    match.com free trial
    29 Декабря 2019, 10:43
     ↑  0  ↓     ответ

    It's a shame you don't have a donate button!

    I'd definitely donate to this outstanding blog! I suppose for now i'll settle for bookmarking and adding your RSS

    feed to my Google account. I look forward to fresh updates and will share this site with my Facebook group.

    Talk soon!

  • plenty of fish vs match.com free trial
    plenty of fish vs match.com free trial
    30 Декабря 2019, 18:09
     ↑  0  ↓     ответ

    What a material of un-ambiguity and preserveness of precious know-how

    on the topic of unexpected feelings.

  • match.com free trial
    match.com free trial
    31 Декабря 2019, 05:42
     ↑  0  ↓     ответ

    You need to take part in a contest for one of the best blogs on the web.

    I am going to recommend this site!

  • http://asksylphoflight.tumblr.com
    http://asksylphoflight.tumblr.com
    31 Декабря 2019, 13:52
     ↑  0  ↓     ответ

    I am regular visitor, how are you everybody? This article posted at this website

    is truly good.

  • sling tv
    sling tv
    01 Января 2020, 05:01
     ↑  0  ↓     ответ

    When I initially left a comment I seem to

    have clicked on the -Notify me when new comments are added- checkbox and from now

    on each time a comment is added I recieve four emails with the exact same comment.

    There has to be an easy method you are able to remove me

    from that service? Thanks!

  • https://russellwebster.tumblr.com/
    https://russellwebster.tumblr.com/
    01 Января 2020, 09:05
     ↑  0  ↓     ответ

    With havin so much written content do you ever run into

    any issues of plagorism or copyright infringement?

    My website has a lot of unique content I've either created myself or

    outsourced but it seems a lot of it is popping it up all over the web without my authorization. Do you know any techniques to help reduce content from being ripped off?

    I'd truly appreciate it.

  • http://tinyurl.com/sling-tv-48639
    http://tinyurl.com/sling-tv-48639
    03 Января 2020, 00:49
     ↑  0  ↓     ответ

    Does your website 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 grow over

    time.

  • sling tv
    sling tv
    03 Января 2020, 09:12
     ↑  0  ↓     ответ

    Excellent blog you have here.. It's difficult to find high-quality writing like yours these days.

    I honestly appreciate people like you! Take care!!

  • https://asksylphoflight.tumblr.com/ sling tv
    https://asksylphoflight.tumblr.com/ sling tv
    05 Января 2020, 13:47
     ↑  0  ↓     ответ

    I'm pretty pleased to find this website.

    I want to to thank you for ones time due to this wonderful read!!

    I definitely enjoyed every part of it and i also

    have you saved as a favorite to see new information on your website.

  • sling tv
    sling tv
    07 Января 2020, 05:09
     ↑  0  ↓     ответ

    Ahaa, its pleasant discussion on the topic of this paragraph at this place at this webpage, I have read all that,

    so now me also commenting at this place.

  • sling tv
    sling tv
    07 Января 2020, 18:16
     ↑  0  ↓     ответ

    These are really wonderful ideas in about blogging.

    You have touched some pleasant factors here. Any way keep up wrinting.

  • sling tv
    sling tv
    08 Января 2020, 04:11
     ↑  0  ↓     ответ

    It is in point of fact a nice and helpful piece of information. I am satisfied

    that you just shared this useful information with us.

    Please stay us informed like this. Thanks for sharing.

  • sling tv
    sling tv
    14 Января 2020, 10:46
     ↑  0  ↓     ответ

    Hello, I do think your blog may be having internet

    browser compatibility problems. Whenever I take a look at your website in Safari, it looks fine however,

    when opening in Internet Explorer, it has some overlapping issues.

    I merely wanted to give you a quick heads up!

    Other than that, wonderful website!

  • sling tv
    sling tv
    15 Января 2020, 01:09
     ↑  0  ↓     ответ

    Hello everybody, here every person is sharing these familiarity,

    therefore it's good to read this website, and I used to

    pay a quick visit this weblog every day.

  • sling tv
    sling tv
    15 Января 2020, 17:25
     ↑  0  ↓     ответ

    Howdy! I could have sworn I've visited your blog before but after browsing through a few of the posts I realized it's new to me.

    Regardless, I'm definitely delighted I stumbled upon it and I'll

    be bookmarking it and checking back often!

  • sling tv
    sling tv
    17 Января 2020, 13:20
     ↑  0  ↓     ответ

    It's fantastic that you are getting thoughts from this paragraph as well

    as from our discussion made at this place.

  • sling tv
    sling tv
    18 Января 2020, 16:24
     ↑  0  ↓     ответ

    Great post. I was checking continuously this blog and I'm impressed!

    Extremely helpful info particularly the last part :) I care for such

    info much. I was looking for this particular info

    for a long time. Thank you and best of luck.

  • sling tv
    sling tv
    19 Января 2020, 11:08
     ↑  0  ↓     ответ

    Excellent way of telling, and fastidious piece of writing

    to get data regarding my presentation topic, which i am going to convey in academy.

  • sling tv best package 2020
    sling tv best package 2020
    24 Января 2020, 13:59
     ↑  0  ↓     ответ

    We are a group of volunteers and opening a new scheme in our community.

    Your web site offered us with helpful information to work on. You've performed a formidable activity

    and our entire community will be grateful to you.

  • sling tv
    sling tv
    29 Января 2020, 06:09
     ↑  0  ↓     ответ

    For newest information you have to pay a visit world wide web and

    on the web I found this web site as a finest

    site for newest updates.

  • cbd oil that works 2020
    cbd oil that works 2020
    04 Апреля 2020, 14:59
     ↑  0  ↓     ответ

    This paragraph will help the internet users for setting up

    new webpage or even a blog from start to end.

  • cbd oil that works 2020
    cbd oil that works 2020
    04 Апреля 2020, 20:51
     ↑  0  ↓     ответ

    Link exchange is nothing else except it is simply placing the other person's

    webpage link on your page at proper place and other person will also do similar in support of you.

  • g
    g
    15 Июня 2020, 18:00
     ↑  0  ↓     ответ

    Useful info. Lucky me I found your site unintentionally,

    and I am surprised why this accident did not took place in advance!

    I bookmarked it.

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




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

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