Установка модуля CKEditor и настройка CKFinder на Drupal 7.

Многие переходят с Drupal 6 на седьмую версию. Кто-то ставит с нуля сразу семерку, как автор. И оказывается, что в сети относительно мало информации о том, как установить CKEditor + CKFinder и настроить CKFinder на Drupal 7. Не знаю, в чем причина. То ли большинство уже прожженные мастера друпала и им такая инструкция ни к чему, то ли еще просто слишком мало людей столкнулось с этой задачей. В любом случае, подходящую информацию я нашел только на англоязычном сайте.

 

Что такое CKEditor + CKFinder и зачем это нужно.

 

Наверное, если уж вы читаете эту статью, то имеете представление о том, что из себя представляет модуль CKEditor. Тогда можете переходить к следующему параграфу, а в противном случае я постараюсь объяснить кратко.

Текстовый редактор, который используется в Drupal для написания и редактирования текста, является, по сути, аналогом Блокнота в Windows. Если вам необходимо вставить картинку, изменить размер шрифта, отформатировать абзац, то придется это всё делать через использование HTML тегов. Конечно, это неудобно. К тому же, приходится заливать на сервер картинки и вставлять ссылки на них в тексте вручную.

Для облегчения редактирования текста и предназначен CKEditor. Это визуальный (WYSIWYG) редактор текста, позволяющий форматировать большие блоки текста аналогично тому, как это делается в Word. В дополнение к нему есть менеджер файлов CKFinder, позволяющий прямо из окна CKEditor загрузить файлы, изображения в дополнение к тем, что уже есть на сервере, а затем выбрать нужные для вставки в текст. Писать заметки становится совсем удобно!

 

Установка и настройка CKEditor + CKFinder.

 

Для начала скачиваем архив, содержащий CKEditor со страницы http://cksource.com/ckeditor-for-drupal/download из секции CKEditor for Drupal 7 и разархивируем его содержимое в папку sites/all/modules вашего друпала. Затем идем по адресу ваш_сайт/admin/modules, находим там CKEditor и включаем его. Сохраняем настройки. Всё, теперь на сайте работает WYSIWYG редактор. Начните создавать какой-либо материал и увидите что-то вроде этого:

Половина дела сделана! Теперь можно использовать кнопки для изменения текста, однако если попытаться добавить изображение, то произойдет следующее:

 

здесь всё хорошо, пробуем выбрать файл из имеющихся на сервере:

 

Что же делать с ошибкой CKFinder в Drupal 7 Браузер файлов отключен из-за соображений безопасности. Пожалуйста, сообщите вашему системному администратру и проверьте конфигурационный файл CKFinder?

Для решения проблемы идем в папку sites/all/modules/ckeditor вашего друпала. Там видим папку ckfinder. Ее удаляем, поскольку имеет смысл обновить CKFinder прежде чем чинить его. Скачиваем архив с CKFinder со страницы проекта http://ckfinder.com/download и разархивируем его содержимое в папку ckeditor из которой мы только что удалили прежнюю версию CKFinder. Снова появляется папка ckfinder. В ней открываем для редактирования файл config.php.

  1. Удаляем функцию CheckAuthentication(). Не волнуйтесь, эта функция уже есть в файле, который мы подключим чуть ниже.
    function CheckAuthentication()       <- удалить
    {                                    <- удалить
       //WARNING : DO NOT simply...      <- удалить
       ...                               <- удалить
       return false;                     <- удалить
    }                                    <- удалить
  2. Сразу после строки
    $baseDir = resolveUrl($baseUrl);

    вставьте следующее:

    require_once '../../../../includes/filemanager.config.php';

    ВНИМАНИЕ! Если вы устанавливали CKFinder не в папку sites/all/modules/ckeditor/ckfinder, а в папку sites/all/libraries/ckfinder, то вставьте другую строку:

    require_once '../../../../../modules/ckeditor/includes/filemanager.config.php';
  3. Сохраните изменения.
  4. Откройте для редактирования файл sites/default/settings.php и сделайте следующее:

    >раскомментируйте переменную $base_url и установите ее значение равным URL вашего сайта (без косой черты в конце!). Пример: $base_url = 'http://www.technerium.ru';  // NO trailing slash!

    >раскомментируйте переменную $cookie_domain и установите ее значение равным доменному имени вашего сайта НАЧИНАЯ С ТОЧКИ. Пример: $cookie_domain = '.technerium.ru';
     

  5. Сохраните изменения.
  6. Проверьте, чтобы на странице /admin/config/content/ckeditor вашего сайта в секции File Browser Settings в опциях
    File browser type (Link dialog window)
    File browser type (Image dialog window)
    File browser type (Flash dialog window)
    был выбран CKFinder.

Теперь можно радоваться. Снова попробуйте выбрать файл из галереи. Должно получиться что-то вроде

 

Успеха! Вопросы и пожелания оставляйте в комментариях.

Категория: 
Была ли статья полезна: 

Комментарии

Пожалуйста помогите может чо не правильно сделал после всех исправлений всеравно такое же сообщение вылазит

Ответил постом ниже

Приветствую.

В какую папку положили CKFinder?

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

 

Если плагин лежит в нестандартной папке, то по-быстрому убрать сообщение можно, если отредактировать config.php немного не так, как сказано в статье:

 

Не удаляйте функцию CheckAuthentication(). просто замените return false; на return true; Должно сработать даже если плагин установлен в нестандартном месте.

 

function CheckAuthentication() <- 
{ <- //WARNING : DO NOT simply... 
<- ... 
<- return false; <- 
<- return true; <- 
} <-

 

Если после такой правки плагин заработает нормально, то дело, скорее всего, в расположении директории установки. Тогда постарайтесь установить его в папку sites/all/modules сайта и сделать всё по инструкции в статье.

Посл проделанного в отчете о состоянии вот что: CKEditor 4.0 You are using a feature that requires $cookie_domain to be set, but it is not set in your settings.php file (CKFinder is enabled in the Full profile).

После установки ещё 4 модулей WYSIWYG Filter Htmltidy htmLawed и HTML Purifier или HTML Purifier (advanced) последние так с кирпичами и стоят пока... появилось вот такое Ошибка при разборе XML-ответа сервера. ErrorUnknown source Необработанный ответ сервера: Parse error: syntax error, unexpected T_VARIABLE in /home/u179735745/public_html/sites/all/modules/ckeditor/ckfinder/config.php on line 79 Только вот как понять что туда вставлять надо в 79 строку?

С этим разобрался... теперь в отчете о состоянии: CKEditor 4.0 You are using a feature that requires $cookie_domain to be set, but it is not set in your settings.php file (CKFinder is enabled in the Full profile). Но в settings.php сделал всё как описано.

Здравствуйте Можете написать ту часть settings.php, которую меняли? (ту, что с $cookie_domain, я подозреваю что там что-то не так вышло, может быть строчку не раскомментировали - нужно # убрать, а только адрес поменяли). Вообще же можете сами сравнить то, что есть у меня, с вашим:

 

 

/**
 * Drupal automatically generates a unique session cookie name for each site
 * based on its full domain name. If you have multiple domains pointing at the
 * same Drupal site, you can either redirect them all to a single domain (see
 * comment in .htaccess), or uncomment the line below and specify their shared
 * base domain. Doing so assures that users remain logged in as they cross
 * between your various domains. Make sure to always start the $cookie_domain
 * with a leading dot, as per RFC 2109.
 */
 $cookie_domain = '.technerium.ru';

А что если библиотеки самого редактора стоят по пути sites/all/libraries/ckeditor? Раньше там и ckfinder находился который я удалил от туда. Из за этого может не работать. Вроде в отчете о состоянии все нормально, а вот иконки активные на редакторе но картинок их нет. А в ckefinder вообще не каких сообщений и проводник не загружается. Запарился уже.

Заработали иконки на skeditor, но в ckefinder вот такая ошибка: Ошибка при разборе XML-ответа сервера. ErrorUnknown source Необработанный ответ сервера: Parse error: syntax error, unexpected T_VARIABLE in /home/u179735745/public_html/sites/all/modules/ckeditor/ckfinder/config.php on line 78

$config['Thumbnails'] = Array( 'url' => $baseUrl . '_thumbs', 'directory' => $baseDir . '_thumbs', 'enabled' => true, 'directAccess' => false, 'maxWidth' => 100, 'maxHeight' => 100, 'bmpSupported' => false, 'quality' => 80);

Скорее всего пропущена точка с запятой ; в конце предыдущей, 77 строки.

Заработало. 75 Thumbnails : thumbnails settings. All thumbnails will end up in the same 76 directory, no matter the resource type. 77 */; 78 $config['Thumbnails'] = Array( 'url' => $baseUrl . '_thumbs', 'directory' => $baseDir . '_thumbs', 'enabled' => true, 'directAccess' => false, 'maxWidth' => 100, 'maxHeight' => 100, 'bmpSupported' => false, 'quality' => 80); Библиотеки ckefinder находятся в папке самого модуля: sites/all/modules/ckeditor/ckfinder Так же библиотеки ckeditor в sites/all/modules/ckeditor/ckeditor Всё отлично работает. Благодарен вам:)

Буду рад видеть вас снова)

нашел решение по поводу надписи в ckfinder This is the DEMO version of CKFinder. Please visit the CKFinder web site to obtain a valid license. вот здесь: http://xdan.ru/Kak-ubrat-nadpis-Demo-v-ckFinder.html#comment0 только вот на версию 2.02 на новых алгоритм сменили. Интересно что там вырезать и где я так и не понял, столько всего написано, что голова кругом идет. Парень что статью эту написал видать высший пилотаж знает, такой трюк не каждый сделает. Этож надо пусть даже с калькулятором специальным я б до такого и не додумался... Да и в нашем случае, из за отсутсявия ; не работает код как надо... мне бы очень хотелось всему научиться, не взирая на мои 35:)

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

 

75 Thumbnails : thumbnails settings. All thumbnails will end up in the same
76 directory, no matter the resource type.
77 */;
78 $config['Thumbnails'] = Array(
'url' => $baseUrl . '_thumbs',
'directory' => $baseDir . '_thumbs',
'enabled' => true,
'directAccess' => false,
'maxWidth' => 100,
'maxHeight' => 100,
'bmpSupported' => false,
'quality' => 80);

 

Здесь бесполезно ставить ; в 77 строке, поскольку 75-77 строки - это комментарий (всё между комбинациями символов /* и */ - комментарий), а ; необходимо поставить в конце активного кода (до /*). Если хотите, можете привести код здесь, тогда будет понятнее.

 

Спасибо за ссылку на полезную статью о надписи Demo version. В ближайшем будущем я напишу статью о ней для текущей версии CKFinder.

Вообще после всех этих движений пропали иконки со CKEditor.

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

Так это демо версия? This is the DEMO version of CKFinder. Please visit the CKFinder web site to obtain a valid license.

Все решаемо.

Подскажете? При установки фильтров html tidy получил вот такую ошибку: Warning: file_exists(): open_basedir restriction in effect. File(/bin/tidy) is not within the allowed path(s): (/home/u355987455:/usr/lib/php:/tmp) в функции htmltidy_test() (строка 335 в файле /home/u355987455/public_html/sites/all/modules/htmltidy/htmltidy.module). Но что в 335 строке не так? ума не приложу:( 332 foreach ($maybepaths as $tidypath) { 334 drupal_set_message('Looking for tidy at '. $tidypath); 335 if (file_exists($tidypath)) { 336 break; 337 } 338 } 339 if (!file_exists($tidypath)) { 340 $message = "Couldn't find tidy binary anywhere!"; 341 return FALSE; 342 }

К сожалению, я не имел дела с html tidy. Возможно, вам поможет это обсуждение - http://drupal.org/node/181652 Если же вас беспокоит только вывод сообщения об ошибке, то для его отключения попробуйте заменить 335 if (file_exists($tidypath)) { на 335 if (@file_exists($tidypath)) { то есть поставить @ перед вызовом функции file_exists

У меня проблема в том, что всем доступ идет только в папку: /sites/default/files/images, а в каких настройках прописан этот путь, не могу вычислить. Бьюсь уже несколько дней. Для админа хочу настроить доступ в /sites/default/files/pictures, здесь все уже опубликованные изображения. Как это сделать???

Этот путь складывается из пути к файлам пользователей по умолчанию (/sites/default/files) и имени папки с изображениями (images).

 

Вы можете настроить путь к файлам, используя для этого профили CKEditor. Создайте профиль CKEditor, привяжите его к определенной роли пользователя (я так понимаю, у вас это будет роль администратора). В настройках профилей есть два поля в секции FILE BROWSER SETTINGS

На скрине выше я добавил testpath/ в поля чтобы продемонстрировать настройку. По умолчанию значения полей следующие

 

Path to uploaded files: %b%f/

Absolute path to uploaded files: %d%b%f/

 

Изменив эти значения, вы можете задать нужный вам путь к папке с файлами. Не забудьте про слэш (/) в конце пути. Но есть один нюанс: CKFinder в в любом случае будет пытаться лезть в папку <Ваш путь>images. Я не знаю легкой возможности задать вместо images например папку pictures как в вашем случае.

Спасибо, что откликнулись. Вы совершенно правы в этом нюансе: когда я задал путь %b%f/pictures/ для Full HTML, то CKFinder создал новую папку /sites/default/files/pictures/images.

Помимо это я ckeditor.config.js я добавил строки:

CKEDITOR.replace( 'editor1',
{
    filebrowserBrowseUrl : '/ckfinder/ckfinder.html',
    filebrowserImageBrowseUrl : '/ckfinder/ckfinder.html?type=Images',
    filebrowserFlashBrowseUrl : '/ckfinder/ckfinder.html?type=Flash',
    filebrowserUploadUrl :
        '/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Files&currentFolder=/public_html/мой-сайт.org/sites/default/files/',
    filebrowserImageUploadUrl :
       '/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Images&currentFolder=/public_html/мой-сайт.org/sites/default/files/pictures/',
    filebrowserFlashUploadUrl : '/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Flash'
});

Но это возымело никакого действия. Взято из: http://docs.cksource.com/CKFinder_2.x/Developers_Guide/PHP/CKEditor_Inte... - Manual Integration to configure CKEditor.

Нашел интересную страничку, но это для старого CKFinder (??): blog.msecms.ru/2011/05/17/ckfinder_few_work_folders/
Такого кода в моём ckfinder/config.php нет. Кстати у меня установка CKEditor for Drupal 7 (http://cksource.com/ckeditor-for-drupal/download), то есть у меня в папке модуля CKEditor стоят библиотеки CKEditor и CKFinder.

Это как-то связано с CKFinder.config.startupPath (docs.cksource.com/ckfinder_2.x_api/symbols/CKFinder.config.html#.selectActionFunction)

Прописывал настройки доступа для разных ролей, но без толку (docs.cksource.com/CKFinder_2.x/Developers_Guide/PHP/Configuration/Access_Control)

* * *
Задача вроде бы простая, получить доступ в директорию /sites/default/files/pictures (где у меня все фото), и потом через профили раздать доступ в ../files/images  для зарегистрированных пользователей.
Четвертый день уже бьюсь, перерыл пол-интернета, решения нет. :((  

 

Ваш комментарий с примерами кода побудил настроить всё-таки CKEditor для незарегистрированных пользователей

 

Присмотритесь к ckfinder/config.php, там должны быть такие строчки

 

$config['ResourceType'][] = Array(
        'name' => 'Images',
        'url' => $baseUrl . 'images',
        'directory' => $baseDir . 'images',
        'maxSize' => 0,
        'allowedExtensions' => 'bmp,gif,jpeg,jpg,png',
        'deniedExtensions' => '');

 

Насколько я понял, именно они отвечают за то, что картинки загружаются в папку images внутри папки, заданной в текущем профиле.

 

Вы можете изменить это на

 

$config['ResourceType'][] = Array(
        'name' => 'Images',
        'url' => $baseUrl . 'pictures',
        'directory' => $baseDir . 'pictures',
        'maxSize' => 0,
        'allowedExtensions' => 'bmp,gif,jpeg,jpg,png',
        'deniedExtensions' => '');

 

чтобы перейти от использования images к pictures. Дальше нужно копать в направлении конфигурации разных типов ResourceType для разных ролей.

 

Я правильно понимаю, что вы хотите обязательно использовать общий путь к папке с файлами (/sites/default/files/) для всех пользователей, и чтобы только папка с картинками отличалась?

 

Ведь можно просто сконфигурировать разные пути к папкам с файлами, что-то вроде

 

%b%f/adminfiles/ - для админа

%b%f/otherusers/ - для другой роли

 

Тогда папки пользователей не будут пересекаться.

Ура! Наконец-то, свершилось чудо! :)  Спустя много дней я увидел свою папку ../pictures.

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

 

С учетом ваших рекомендаций ('url' => $baseUrl . 'pictures', и т.д.) получилось следующее:

Настройки Full HTML  (для админа):

Path to uploaded files  - %b%f/

Absolute path to uploaded files - %d%b%f/

Доступ в директорию : /sites/default/files/pictures  (здесь все мои предыдущие фото. Это мой основной интерес, чтобы остался доступ к этим фото в режиме Full HTML)

 

Filtered HTML (для зарегистрированных пользователей)

Path to uploaded files - %b%f/images/

Absolute path to uploaded files  - %d%b%f/

Доступ в директорию : /sites/default/files/images/pictures  (здесь создалась новая папка .. /pictures, которая как и вышестоящая папка /images пустая, для заполнения пользователями)

 

Остались наверное детали. Из диалогового окна CKFinder не могу  удалить и переименовать файлы (в режиме Full HTML).  На файлах доступ - 0644, на папки – 0755, вроде бы обычные ограничения.

 

Ещё проблема : нажав на кнопку Flash и “Выбор на сервере» получаю окно, где есть только корзина. Папки Flash на сервере нет.  Создал вручную /sites/default/files/flash, но это не помогло. Даже меню «Загрузить на сервер» не доступно. Как можно загрузить файлы? (устроит в любую папку, только для админа).  

 

- И еще спрошу,  может вы знаете: При ранних публикациях, когда я вставлял рисунок в статью и в анонс (кажется из-за этого), то фото на сервере дублировалось с добавлением номера к имени файла – filename_0.jpg,  filename_1.jpg.  А если статьи тематические, где идет одно и то же фото, то файл дублируется на сервере. В итоге у меня набралось с десяток повторяющихся фото на сервере от одной картинки, а также куча клонов от других. Отчего это происходит и как с этим бороться?? 

 

Рад, что вы сделали желаемое. Я изначально посчитал, что это будет сложнее, однако в исходники всё же посмотрел.

 

Я всё же думаю, что для зарегистрированных пользователей следует добавить images и в поле Absolute path to uploaded files, вроде бы оно должно соотвествовать содержимому первого поля.

 

Касательно ваших проблем с Flash: в том самом config.php в котором вы правили конфигурацию для картинок и заменили images на pictures у вас скорее всего отсутствует или закомментирована секция вида

 


$config['ResourceType'][] = Array(
        'name' => 'Flash',
        'url' => $baseUrl . 'flash',
        'directory' => $baseDir . 'flash',
        'maxSize' => 0,
        'allowedExtensions' => 'swf,flv',
        'deniedExtensions' => '');

 

Ее нужно добавить/раскомментировать. Она очень похожа на такую же для картинок и настраивает папки, типы файлов для Flash контента.

 

Если у вас не удаляются файлы, то проблема точно в разрешениях. А те файлы, которые вы добавляете через CKEditor вы удалить в нём же можете? Я подозреваю, что вы переносили сайт с хостинга на хостинг и тогда уже имеющиеся картинки могут не удаляться, а те, которые вы сейчас загружаете через редактор, будут удаляться . Если так, то советую сравнить пользователя/группу старых файлов и новых. Если старые файлы или папки принадлежат другому пользователю или группе, то поменяете права чтобы было как новых файлах.

 

Про копии картинок ничего сказать, к сожалению, не могу.

Как-то странно с этими разрешениями, пока не могу разобраться. После закачки картинок через CKFinder файлы становятся недоступными для удаления админом. Папки - 755, файлы - 664, всё стандартно, а после закачки новой картинки - 0777, но все равно не удаляется.
  
В config.php настройки с Flash, Images, Files все группы находятся рядом, незакомментированы.

Для справки: у меня установка  CKEditor for Drupal 7, т.е. в папке модуля CKEditor стоят библиотеки CKEditor и CKFinder. Ранее в \sites\all\libraries\ установить не получилось, как сейчас догадываюсь, из-за того, что после закачки возможно  были неправильные разрешения на папки (после FTP). Поэтому взял вариант "CKEditor for Drupal 7".

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

Все оставил, настроил

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

Трудно что-то сказать. Посмотрите, нет ли ошибок в консоли браузера.

В консоли POST http://мойсайт.ru/drupal/sites/all/modules/ckeditor/ckfinder/core/connector/php/connector.php -  [HTTP/1.1 500 Internal Server Error 13279мс]

Ну, наконец ещё раз взял штурмом этот редактор, тем более что вышла новая библиотека 4.4.7. Удалил всё, и заново установил сначала Drupal модуль CKEditor, и потом поставлил в папке библиотек CKEditor и  CKFinder (до этого было все в папке модуля).     

В настройке стоит:  Path to CKEditor:   //cdn.ckeditor.com/4.4.3/full-all   - не знаю, радоваться ли этой внешней ссылке. В целом, стало намного лучше.

Но для меня полная загадка, куда ставить плагины??  Если залить новый плагин в библиотеку CKEditor /plugins, и добавить строку в его config.js :

config.extraPlugins = 'blockquote';

то ничего не происходит, плагина не видно. При этом Path to the CKEditor plugins directory: %l/plugins
Если залить  его в папку друпал модуля  CKEditor /plugins , то модуль появляется, и его можно подключить. (при %m/plugins)  Речь идет о 'blockquote, цитата в редакторе видится нормально, с полосой слева, но в публикации этой полосы нет, есть только отступ цитаты, текст "голый". Почему?

При установке blockquote в папку библиотеки, это никак не отражается на работе. Т.е. можно как би и не ставить,, поскольку кнопка Цитата есть, а эффект тот же. 

Тут я запутался.
Во первых, кнопка цитата (как и у вас здесь) у меня была до установки плагина blockquote. Работала так же как и описано выше.
Во вторых, плагин blockquote относится к этой кнопке или нет??
В третьих, папки плагинов есть в модуле (немного) и в библиотеке (много). Куда ставить новые, где активировать существующие (некоторые плагины есть в настройках Full HTNL, но их там 10 шт, а в папке библиотеки 29 шт) ?  Какая у вас практика установки плагинов???

При любой настройке Path to the CKEditor plugins directory всё те же 10 шт. плагинов. Или активация плагинов идет с сайта CKEditor?

 

Может у меня проблема с baseUrl?

Сайт расположен по адресу http://мойсайт/drupal/

Указываю $baseUrl = '/files/' - права 755

Снес все, поставил заново модуль CKEditor и библиотеки CKEditor 4.4.7  и  CKFinder 2.4.2 в папку libraries

Все настроил

Все равно получаю такую-же проблему. Может проблема с путями?

Получилось! После того как задал

$baseUrl = 'http://мой-сайт/drupal/sites/default/files/';
$baseDir = '/home/u65196/мой-сайт/www/drupal/sites/default/files/';
require_once '/home/u65196/мой-сайт/www/drupal/sites/all/modules/ckeditor/includes/filemanager.config.php';
 

 

Добавить комментарий

HTML

  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <pre> <p>
  • Строки и параграфы переносятся автоматически.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Поместите примеры вашего исходного кода в теги <code>...</code> or <source>...</source> и он будет красиво отформатирован.

Plain text

  • Поместите примеры вашего исходного кода в теги <code>...</code> or <source>...</source> и он будет красиво отформатирован.
  • Строки и параграфы переносятся автоматически.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <code> <source>
CAPTCHA
Пожалуйста, подтвердите, что вы человек.