A

AlexSF

+187
Репутация
36
Рейтинг
#1 [ЕСТЬ РЕШЕНИЕ] Фатальная ошибка в "Доске объявлений" 11 сентября 2012 в 19:44
Написал хостеру. Они через пол часа ответили:

Всё исправлено

Приношу свои извинения, что отвлёк.
#1 [ЕСТЬ РЕШЕНИЕ] Фатальная ошибка в "Доске объявлений" 11 сентября 2012 в 16:39
Всем доброго времени суток.
Пару дней назад хостер произвёл обновление РНР до версии 5.3.16. И после этого пропала возможность добавлять объявления. Выдаёт следующую ошибку.

Fatal error: Call to undefined method cms_model_board::strClear() in /****/****/gorodv.by/core/cms.php on line 1865

Такая же ошибка при попытке фильтрации объявлений.

  1.  
  2. public function request($var, $type='str', $default=false){
  3. if (isset($_REQUEST[$var])){
  4. switch($type){
  5. case 'int': return (int)$_REQUEST[$var]; break;
  6. case 'str': if ($_REQUEST[$var]) { return $this->strClear($_REQUEST[$var]); } else { return $default; } break;
  7. case 'email': if(preg_match("/^([a-zA-Z0-9\._-]+)@([a-zA-Z0-9\._-]+)\.([a-zA-Z]{2,4})$/i", $_REQUEST[$var])){ return $_REQUEST[$var]; } else { return $default; } break;
  8. case 'html': if ($_REQUEST[$var]) { return $this->strClear($_REQUEST[$var], false); } else { return $default; } break;
  9. case 'array': if (is_array($_REQUEST[$var])) { return $_REQUEST[$var]; } else { return $default; } break;
  10. case 'array_int': if (is_array($_REQUEST[$var])) { foreach($_REQUEST[$var] as $k=>$i){ $arr[$k] = (int)$i; } return $arr; } else { return $default; } break;
  11. case 'array_str': if (is_array($_REQUEST[$var])) { foreach($_REQUEST[$var] as $k=>$s){ $arr[$k] = $this->strClear($s); } return $arr; } else { return $default; } break;
  12. }
  13. } else {
  14. return $default;
  15. }
  16. }
  17.  
#2 Микроразметка Schema.org для InstantCms 20 августа 2012 в 15:24
Если вдруг чего сразу не получилось, то стоит проверить не прописан ли код глубиномера в шаблоне.
Если он там есть, то вносите правки туда — по аналогии.
#3 Микроразметка Schema.org для InstantCms 19 августа 2012 в 16:48
Всем доброго времени суток.
Я решил продолжить развитие темы, “Микроразметка Schema.org для InstantCms”. И сегодня я расскажу, как реализовать “Хлебные крошки” (Breadcrumb, Глубиномер) в выдаче Поисковых систем. К сожалению это будет небольшой хак ядра.

Для внесения правок нам понадобится только один файл — ваш сайт/core/classes/page.class.php. В нём находим функцию “Глубиномера”. В чистом, не изменённом, файле она находится на строках с 252 по 273.

Собственно теперь мы готовы произвести “Микроразметку хлебных крошек”. Так как на сайте Schema.org мне не удалось найти вразумительных правил для разметки Breadcrumb, я пошёл на сайт data-vocabulary.org. В совокупности эти два сайта открывают практически безграничные возможности для работы с “Микроразметкой сайта”.

И так, на 263 строке размещён <div class="pathway">. Добавим сюда атрибуты, объявляющие о начале и типе разметки — itemscope itemtype="http://data-vocabulary.org/Breadcrumb".

Далее на 265 строке расставляем атрибуты — itemprop="url"(адрес цепочки) и <span itemprop="title">(Название цепочки). А на 267 строке ставим атрибут <span itemprop="child">(переход к следующему элементу в цепочке).

Вот и вся “Микроразметка для хлебных крошек(Breadcrumb)”.
В итоге у меня получился такой код:
  1.  
  2.  
  3. /**
  4.  * Печатает глубиномер
  5.  * @param string $separator
  6.  */
  7. public function printPathway($separator='&#8594;'){
  8.  
  9. $inCore = cmsCore::getInstance();
  10. $inConf = cmsConfig::getInstance();
  11.  
  12. //Проверяем, на главной мы или нет
  13. if (($inCore->menuId()==1 && !$inConf->index_pw) || !$inConf->show_pw) { return false; }
  14.  
  15. if ($inConf->short_pw){ unset($this->pathway[sizeof($this->pathway)-1]); }
  16.  
  17. if (is_array($this->pathway)){
  18. echo '<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb" class="pathway">';
  19. foreach($this->pathway as $key => $value){
  20. echo '<a href="'.$this->pathway[$key]['link'].'" class="pathwaylink" itemprop="url">'.'<span itemprop="title">'.$this->pathway[$key]['title'].'</span></a> ';
  21. if ($key<sizeof($this->pathway)-1) {
  22. echo '<span itemprop="child">'.$separator.'</span>';
  23. }
  24. }
  25. echo '</div>';
  26. }
  27.  
  28. }
  29.  
  30.  
Результат проверки на www.google.com/webmasters/tools/richsnippets
#4 [ЕСТЬ РЕШЕНИЕ] Аудит безопасности InstantCMS 1.10 19 августа 2012 в 10:16
Внёс посильную лепту в копилку Аудита
#5 Микроразметка Schema.org для InstantCms 15 июля 2012 в 00:38
Продолжаю развивать тему расширенного сниппета для статей/блогов сайта в ПС.
Пока не получается реализовать звёздный рейтинг, а жаль. Но я ведь и не программист.

Решил чуток отдохнуть от рейтингов и привязать профиль пользователя к Google+.
Зачем это нужно? – спросят многие. По сути это передача забот по охране авторских прав на плечи Google.
И добавляет фото автора статьи к сниппету в выдаче Google.

Решить эту задумку оказалось гораздо проще, чем в Joomla. И так, что же я делал:
В конструкторе форм создал текстовое поле – Мой профиль в Google+.
На сайте в настройках профиля добавил соответствующую ссылку и сохранил профиль.
Посмотрел результат сохранения и заплакал. Ссылка получила вид
mysayt/user/hobby/ plus.google.com/u/0/айди пользователя/posts
Пошёл искать, где же формируется сей ужас — //mysayt/user/hobby/.
Нашёл в конструкторе форм mysayt/components/users/includes/ userforms.php, в районе 93 строки:
  1. $default = cmsPage::getMetaSearchLink('/users/hobby/', $default);
И заменил на:
  1. $default = '<a rel="me" target="_blank" href="'.$default.'">'.$default.'</a>';
То есть для подключения профиля Google+ нужно ввести ссылку на профиль и в самом профиле Google+ указать ссылку на ваш сайт. Теперь в выдаче Google(точно) для некоторых, популярных, статей и блогов будет присутствовать фото автора статьи. Что будет повышать уровень доверия пользователей к вашему сайту. А, следовательно, влиять на все остальные показатели сайта.

Данное решение не элегантное и я не знаю как оно повлияет на безопасность сайта, но оно работает.

В принципе всё, осталось решить одну глобальную проблему – как объяснить пользователям сайта, что это за поле и чего с ним делать. Но это уже совсем другая история.
#6 Микроразметка Schema.org для InstantCms 14 июля 2012 в 19:51


можно просто скопировать код и сохранить как com_content_read2.tpl и при создании статьи использовать шаблон ?

lezginka.ru
Разумеется. Для этого и показал. Хотя о com_content_read2.tpl даже и не знал zst, так-как меньше недели
общаюсь/работаю с InstantCMS
Сейчас колдую над рэйтингами.

Чтобы в снипетах присутствовали звёзды рейтинга нужно размечать кодом типо такого:
  1.  
  2. <div itemprop = "aggregateRating"
  3. itemscope itemprop = "http://schema.org/AggregateRating" >
  4. Rated <span itemprop = "ratingValue" > 3.5 </span> /5
  5. based on <span itemprop = "reviewCount" > 11 </span> customer reviews
  6. </div>
  7.  
но я ещё не решил эту задачу
При проверке на Гугле должен получаться такой вид:


Item 1
Type: schema.org/aggregaterating
ratingvalue = 5.0
bestrating = 5
bestrating = 5
ratingcount = 3

а сейчас я получаю



Item 1
ratingvalue = +1
bestrating = 1
reviewcount = 3

#7 Микроразметка Schema.org для InstantCms 14 июля 2012 в 16:31

а поделиться шаблонами, со страждущими, реально ?

Все коды смотрите под спойлерами в посте №7
Просто не решился показать прямые коды, так-как длинна поста станет аки скатерть самобранка на 300персон smile

на ранжирование это не влияет ни как

Ну я бы не был так уверен. На одном сайте(на Joomla) я подключил профиль пользователя к профилю Google+. В итоге в снипете Гугла к некоторым статьям стали прикрепляться аватар из Google+. В итоге статьи с аватарам пошли вверх в ранжировании Гугла. Яндекс не отслеживал.

Было бы очень здорово вместо <span itemprop="contentRating"> прикрутить
  1.  
  2. <div itemprop = "aggregateRating"
  3. itemscope itemprop = "http://schema.org/AggregateRating" >
  4. Rated <span itemprop = "ratingValue" > 3.5 </span> /5
  5. based on <span itemprop = "reviewCount" > 11 </span> customer reviews
  6. </div>
  7.  
Но как объяснить ПС, что +1голос = 5звёзд пока не придумал
#8 Микроразметка Schema.org для InstantCms 14 июля 2012 в 15:11
Я показал разметку от schema.org/ для статей(http://schema.org/Article) и её подраздела блоги( itemscope="BlogPosting") и +добавил раздел отзывы.
А если связать профиль пользователя сайта и профиль Google+ то вообще здорово будет.

Проверено на трёх сайтах — Google принимает на ура, а вот Яндекс акромя рецептов и товаров магазина ещё ничему не научился cryхотя и утверждает, что поддерживает Схема.орг/ help.yandex.ru/webmaster/?id=1122758
#9 Микроразметка Schema.org для InstantCms 14 июля 2012 в 13:41


Интересная тема, особенно если только начинаешь создавать проект.

Alex dChe
Не соглашусь. Микроразметка будет полезна и уже давно работающим сайтам. Тем более, что делов на пол часа. Жаль, что микроразметка поддерживает ещё не все типы страниц сайтов.

Приведу пару примеров, что сделал для своего проекта(пока только для статей и блогов)
шаблон/название шаблона/components/com_content_read.tpl

  1.  
  2.  
  3.  
  4. {* ======================= Заголовок статьи =============================== *}
  5. <div itemtype="http://schema.org/Article" itemscope="">
  6. {if $article.showtitle}
  7. <h1 itemprop="headline" class="con_heading">{$article.title}</h1>
  8. {/if}
  9.  
  10. {* ======================= Дата публикации =============================== *}
  11. {if $article.showdate}
  12. <div class="con_pubdate">
  13. <span itemprop="datePublished">{if !$article.published}<span style="color:#CC0000">{$LANG.NO_PUBLISHED}</span>{else}{$article.pubdate}{/if}</span> - <span itemprop="author"><a rel="author" href="{profile_url login=$article.user_login}">{$article.author}</a></span>
  14. </div>
  15. {/if}
  16.  
  17. {* =============== Cодержание статьи (список страниц) ========================= *}
  18. {if $is_pages}
  19. <div class="con_pt" id="pt">
  20. <span class="con_pt_heading">
  21. <a class="con_pt_hidelink" href="javascript:void;" onClick="{literal}$('#pt_list').toggle();{/literal}">{$LANG.CONTENT}</a>
  22. {if $cfg.pt_hide} [<a href="javascript:void(0);" onclick="{literal}$('#pt').hide();{/literal}">{$LANG.HIDE}</a>] {/if}
  23. </span>
  24. <div id="pt_list" style="{$pt_disp_style} width:100%">
  25. <div>
  26. <ul id="con_pt_list">
  27. {foreach key=tid item=page from=$pt_pages}
  28. {if ($tid+1 != $page)}
  29. {math equation="x + 1" x=$tid assign="key"}
  30. <li><a href="{$page.url}">{$page.title}</a></li>
  31. {else}
  32. <li>{$page.title}</li>
  33. {/if}
  34. {/foreach}
  35. <ul>
  36. </div>
  37. </div>
  38. </div>
  39. {/if}
  40.  
  41. {* =============== Текст статьи =============================== *}
  42. <div class="con_text" style="overflow:hidden">
  43. {if $article_image}
  44. <div class="con_image" style="float:left;margin-top:10px;margin-right:20px;margin-bottom:20px">
  45. <img itemprop="image" src="/images/photos/medium/{$article_image}" border="0" alt="{$article_image}"/>
  46. </div>
  47. {/if}
  48. <span itemprop="articleBody">{$article_content}</span>
  49. </div>
  50.  
  51. {* ============= Ссылка на тему форума ======================== *}
  52. {if $cfg.af_showlink && $forum_thread_id}
  53. <div class="con_forum_link">
  54. <a href="/forum/thread{$forum_thread_id}.html">{$LANG.DISCUSS_ON_FORUM}</a>
  55. </div>
  56. {/if}
  57. {* ============= Ссылки редактирования и модерации ======================== *}
  58. {if $is_admin || $is_editor || $is_author}
  59. <div class="blog_comments">
  60. {if !$article.published && ($is_admin || $is_editor)}
  61. <a class="blog_moderate_yes" href="/content/publish{$id}.html">{$LANG.ARTICLE_ALLOW}</a> |
  62. {/if}
  63. {if $is_admin || $is_editor || $is_author_del}
  64. <a class="blog_moderate_no" href="/content/delete{$id}.html">{$LANG.DELETE}</a> |
  65. {/if}
  66. {if $is_admin || $is_editor || $is_author}
  67. <a href="/content/edit{$id}.html" class="blog_entry_edit">{$LANG.EDIT}</a>
  68. {/if}
  69. </div>
  70. {/if}
  71.  
  72. {* ================ Теги статьи =============================== *}
  73. {if $article.showtags}
  74. <span itemprop="keywords">{$tagbar}</span>
  75. {/if}
  76.  
  77. {* =============== Рейтинг статьи =============================== *}
  78. {if $cfg.rating && $article.canrate}
  79. <div id="con_rating_block">
  80. <div>
  81. <strong>{$LANG.RATING}: </strong><span id="karmapoints"><span itemprop="contentRating">{$karma_points}</span></span>
  82.  
  83. <span style="padding-left:10px;color:#999"><strong>Голосов:</strong> <span itemprop="interactionCount" content="UserLikes:">{$karma_votes}</span></span>
  84. <span style="padding-left:10px;color:#999">{$article.hits|spellcount:$LANG.HIT:$LANG.HIT2:$LANG.HIT10}</span>
  85. </div>
  86. {if $karma_buttons}
  87. <div><strong>{$LANG.RAT_ARTICLE}:</strong> {$karma_buttons}</div>
  88. {/if}
  89. </div>
  90. {/if}
  91.  
  92. {* ======================= Шаблон комментариев см. в файле com_comments_view.tpl =============================== *}
  93. </div><!--закрывающий див микроразметки-->
  94.  
  95.  
Далее в шаблон/название шаблона/components/com_comments_view.tpl изменил следующее

  1.  
  2.  
  3.  
  4. {* ========================== Вывод комментариев ================================== *}
  5.  
  6. {* ====================================== Заголовок ============================================ *}
  7. <div itemprop = "reviews" itemscope itemtype = "http://schema.org/Review" >
  8. <div class="cmm_heading">
  9. {$labels.comments} <span itemprop="reviews">({$comments_count})</span>
  10. </div>
  11. </div><!--закрывающий див микроразметки-->
  12. {* ========================= Сообщение о добавлении/удалении коммента ========================== *}
  13. {if $cm_message}
  14. <p style="color:green">{$cm_message}</p>
  15. {/if}
  16.  
  17.  
  18. <div class="cm_ajax_list">
  19. {if $cfg.cmm_ajax}
  20. <script type="text/javascript">
  21. {literal}
  22. var anc = '';
  23. if (window.location.hash){
  24. var anc = window.location.hash;
  25. }
  26. {/literal}
  27. loadComments('{$target}', {$target_id}, anc);
  28. </script>
  29. {else}
  30. {$html}
  31. {/if}
  32. </div>
  33.  
  34. {* ========================= Сообщение об ошибке добавления коммента ========================== *}
  35. {if $cm_error}
  36. <p style="color:red">{$cm_error}</p>
  37. {/if}
  38.  
  39. {* ===================== Ссылки на добавление комментария и подписку ========================== *}
  40. <div id="addcommentlink" src="#">
  41. <table cellspacing="0" cellpadding="2">
  42. <tr>
  43. <td width="16"><img src="/templates/_default_/images/icons/comment.png" /></td>
  44. <td><a href="javascript:void(0);" id="addcommentlink" onclick="{$add_comment_js}">{$labels.add}</a></td>
  45. {if $cfg.subscribe}
  46. {if $is_user}
  47. {if !$user_subscribed}
  48. <td width="16"><img src="/templates/_default_/images/icons/subscribe.png"/></td>
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.