рдпрд╣ рд╡рд┐рд╖рдп рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдЬреЛ
Cackle рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЦреЛрдЬ рдЗрдВрдЬрди рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдЕрдиреБрдХреНрд░рдордг рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд░реНрдбрдкреНрд░реЗрд╕ рд╕рдВрд╕реНрдХрд░рдг 2.0 рдФрд░ рдЙрдЪреНрдЪрддрд░ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕реАрдПрдордПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ php рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рд╣реИред
рдЕрдиреБрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЖрдкрдХреЗ рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ Cackle рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ html рдкреГрд╖реНрдареЛрдВ рдкрд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
- рдЖрдкрдХреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛рдПрдБ рдмрдирд╛рдиреА рд╣реЛрдВрдЧреА
- рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛
- рд╡рд┐рд╢рд┐рд╖реНрдЯ div рдореЗрдВ рдкреГрд╖реНрда рдкрд░ рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдмрдирд╛рдПрдВ
рдЯреЗрдмрд▓ рдирд┐рд░реНрдорд╛рдг
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рдЖрдкрдХреЛ рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИ рдФрд░ рд╣рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ (mysql рдЙрджрд╛рд╣рд░рдг) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
CREATE TABLE `comment` ( `comment_id` BIGINT(20) NOT NULL AUTO_INCREMENT, `post_id` BIGINT(20) NULL DEFAULT NULL, `url` VARCHAR(2000) NULL DEFAULT NULL, `parent` VARCHAR(20) NULL DEFAULT NULL, `message` TEXT NULL, `media` VARCHAR(1000) NULL DEFAULT NULL, `status` VARCHAR(11) NULL DEFAULT NULL, `rating` INT(11) NULL DEFAULT NULL, `user_agent` VARCHAR(1000) NULL DEFAULT NULL, `ip` VARCHAR(39) NULL DEFAULT NULL, `author_name` VARCHAR(60) NULL DEFAULT NULL, `author_email` VARCHAR(100) NULL DEFAULT NULL, `author_www` VARCHAR(200) NULL DEFAULT NULL, `author_avatar` VARCHAR(200) NULL DEFAULT NULL, `author_provider` VARCHAR(32) NULL DEFAULT NULL, `anonym_name` VARCHAR(60) NULL DEFAULT NULL, `anonym_email` VARCHAR(100) NULL DEFAULT NULL, `created` DATETIME NULL DEFAULT NULL, PRIMARY KEY (`comment_id`) ); CREATE TABLE `common` ( `common_name` VARCHAR(50) NULL DEFAULT NULL, `common_value` VARCHAR(50) NULL DEFAULT NULL )
рдЫреЛрдЯреА рдЯрд┐рдкреНрдкрдгреА:
- post_id - рд╡рд░реНрддрдорд╛рди рдкреЛрд╕реНрдЯ рдХрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рд╕рд░рд▓рддрдо рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреГрд╖реНрда url
- рдореАрдбрд┐рдпрд╛ - рдореАрдбрд┐рдпрд╛ рд╕рд╛рдордЧреНрд░реА, рдЫрд╡рд┐ рд▓рд┐рдВрдХ (png, jpg, gif), рд╡реАрдбрд┐рдпреЛ (youtube, vimeo, vkontakte, rutube), рдкреНрд░рд╕реНрддреБрддрд┐рдпрд╛рдБ (Google, рд╕реНрд▓рд╛рдЗрдбрд╢реЗрдпрд░)
- рд╕реНрдерд┐рддрд┐ - 0 рд▓рдВрдмрд┐рдд, 1 рд╕реНрд╡реАрдХреГрдд, 2 рдЕрд╕реНрд╡реАрдХреГрдд, 3 рд╕реНрдкреИрдо, 4 рд╣рдЯрд╛ рджреА рдЧрдИ
- Author_provider - рд╕реЛрд╢рд▓ рдиреЗрдЯрд╡рд░реНрдХ (рдлреЗрд╕рдмреБрдХ, рдЯреНрд╡рд┐рдЯрд░, рд▓рд┐рдВрдХреНрдбрдЗрди, ..)
- рдирд┐рд░реНрдорд┐рдд - рдирд┐рд░реНрдорд╛рдг рддрд┐рдерд┐
- рдЖрдо - рднрдВрдбрд╛рд░рдг рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ "рд╕реНрдХреНрд░реИрдк" рддрд╛рд▓рд┐рдХрд╛
рдкреБрдирд╢реНрдЪ: рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╕рдВрд╕реНрдерд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ - рдкреЛрд╕реНрдЯ, рд▓реЗрдЦрдХ, рдЕрдирд╛рдо, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЧрддрд┐ рдФрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд░рдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдЯрд┐рдкреНрдкрдгреА рд╕рд┐рдВрдХ рдХрд░реЗрдВ
рдЖрдк рдирд┐рдореНрди RESTful API рд╕реЗрд╡рд╛ рдкрд░ Cackle рдЯрд┐рдкреНрдкрдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
http://cackle.me/api/comment/list?siteApiKey={siteApiKey}&accountApiKey={accountApiKey}&id={id}
рдЬрд╣рд╛рдВ
рд╕рд╛рдЗрдЯрдПрдкреАрдХреЗрдИ (рд╕рд╛рдЗрдЯ рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА) рдФрд░
рдЦрд╛рддрд╛рдПрдкреАрдХреЗрдИ (рдЦрд╛рддрд╛ рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА) рдкреНрд░рд╢рд╛рд╕рди рдкреИрдирд▓ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╡рд┐рдЬреЗрдЯ рдЯреИрдм рдкрд░, рдиреАрдЪреЗ рд╕реЗ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдХрд╛ рдЪрдпрди, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрдВрдХрдбрд╝реЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:


рд╡реИрдХрд▓реНрдкрд┐рдХ
рдЖрдИрдбреА рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рдХрд░реНрд╕рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдпрд╣ рдЕрдиреБрд░реЛрдз рд╕рднреА рдЖрдИрдбреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛, рдЬреЛ рдЕрдиреБрд░реЛрдз рдореЗрдВ
рдЖрдИрдбреА рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВред рдпрджрд┐
рдЖрдИрдбреА рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИ, рддреЛ рдкрд╣рд▓реЗ 100 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рднреЗрдЬреА рдЬрд╛рдПрдВрдЧреАред
рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
- рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдЖрдЦрд┐рд░реА рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЗ рдмрд╛рдж 5 рдорд┐рдирдЯ рдмреАрдд рдЪреБрдХреЗ рд╣реИрдВ, рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдЖрдЧреЗ рдмрдврд╝реЗрдВ
- рд╣рдо рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЕрдзрд┐рдХрддрдо Cackle ID рд▓реЗрддреЗ рд╣реИрдВ рдпрд╛ рдЕрдЧрд░ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рд╣реИ
- рд╣рдо API рдХреЛ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ Cackle ID рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ
- рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╕рд╣реЗрдЬреЗрдВ
- рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдВрддрд┐рдо API рдХреЙрд▓ рдХреЗ рд╕рдордп рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░рд╛рд▓ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реАрдорд╛ (рдХрд┐рд╕реА рднреА рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдз рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐ рдШрдВрдЯреЗ 1000 рдмрд╛рд░) рдХреЗ рдХрд╛рд░рдг рдЖрд╡рд╢реНрдпрдХ рд╣реИред
Php рдХреЛрдб:
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди, рдореБрдХреБрдЯ рдХрд╛ рд╕рдордп, рдПрдкрд▓реА рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА
рд╣рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рдореБрдХреБрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
function time_is_over($cron_time){ $sql="select common_value from common where `common_name` = 'last_time'"; $get_last_time = $this->db_connect($sql, "common_value"); $now=time(); $establish_time_sql="insert into `common` (`common_name`,`common_value`) values ('last_time',$now)"; $delete_time_sql="delete from `common` where `common_name` = 'last_time' and `common_value` > 0;"; if ($get_last_time==null){ $this->db_connect($establish_time_sql); return time(); } else{ if($get_last_time + $cron_time > $now){ return false; } if($get_last_time + $cron_time < $now){ $this->db_connect($delete_time_sql); $this->db_connect($establish_time_sql); return $cron_time; } } }
Comment_sync рдлрд╝рдВрдХреНрд╢рди рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИред
function comment_sync($accountApiKey,$siteApiKey,$cackle_last_comment=0){ $params = "accountApiKey=$accountApiKey&siteApiKey=$siteApiKey&id=$cackle_last_comment"; $host="cackle.me/api/comment/list?$params"; $response = curl($host); $response = $this->cackle_json_decodes($response); $this->push_comments($response);
Insert_comment () рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдпрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдмрдЪрдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ
function insert_comm($comment){ ... if ($comment['parentId']) { $comment_parent_id = $comment['parentId']; $sql = "select comment_id from comment where user_agent='Cackle:$comment_parent_id';"; $get_parent_local_id = $this->db_connect($sql, "comment_id");
рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдЯрд┐рдкреНрдкрдгреА рд╕рд┐рдВрдХ рдХреЛрдб
рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз
рд╣реИ ред
Html рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЖ рд░рд╣реА рд╣реИрдВ
рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ - рдЕрдкрдиреЗ рдкреГрд╖реНрда рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
<div id="mc-container"> [... ...] </div> <script> [... Cackle ...] </script>
Php рдХреЛрдб:
рд╣рдо рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЗрд╕ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ:
function get_local_comments(){
рдХрд┐рд╕реА рдПрдХрд▓ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрдВрдХреНрд╢рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдмрдирд╛рдПрдВ
<?php function cackle_comment( $comment) {?> <li id="cackle-comment-<?php echo $comment['comment_id']; ?>"> <div id="cackle-comment-header-<?php echo $comment['comment_id']; ?>" class="cackle-comment-header"> <cite id="cackle-cite-<?php echo $comment['comment_id']; ?>"> <?php if($comment['author_name']) : ?> <a id="cackle-author-user-<?php echo $comment['comment_id']; ?>" href="<?php echo $comment['author_www']; ?>" target="_blank" rel="nofollow"><?php echo $comment['author_name']; ?></a> <?php else : ?> <span id="cackle-author-user-<?php echo $comment['comment_id']; ?>"><?php echo $comment['anonym_name']; ?></span> <?php endif; ?> </cite> </div> <div id="cackle-comment-body-<?php echo $comment['comment_id']; ?>" class="cackle-comment-body"> <div id="cackle-comment-message-<?php echo $comment['comment_id']; ?>" class="cackle-comment-message"> <?php echo $comment['message']; ?> </div> </div> </li> <?php }
рд╣рдо рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ
function list_comments(){ $obj = $this->get_local_comments(); foreach ($obj as $comment) { $this->cackle_comment($comment); } }
рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╕рд╛рде HTML рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ
function cackle_display_comments(){ ?> <div id="mc-container"> <div id="mc-content"> <ul id="cackle-comments"> <?php $this->list_comments(); ?> </ul> </div> </div> <script type="text/javascript"> var mcSite = '<?php echo $api_id?>'; var mcChannel = '<?php echo $post->ID?>'; document.getElementById('mc-container').innerHTML = ''; (function() { var mc = document.createElement('script'); mc.type = 'text/javascript'; mc.async = true; mc.src = 'http://cackle.me/mc.widget-min.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(mc); })(); </script> <?php }
рдЬреИрд╕рд╛ рдХрд┐ js рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдо mc- рдХрдВрдЯреЗрдирд░ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдкреГрд╖реНрда рдкрд░ рджрд┐рдЦрд╛рдИ рди рджреЗред
рдирддреАрдЬрддрди, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ Cackle рд╡рд┐рдЬреЗрдЯ рдкреГрд╖реНрда рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдФрд░ HTML рдХреЛрдб рдореЗрдВ рдЦреЛрдЬ рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪреА рд╣реЛрдЧреАред