// check that we have access
defined( '_VALID_MOS' ) or die( 'Restricted access' );
// register our event. It would be great of joomla had more events
$_MAMBOTS->registerFunction( 'onPrepareContent', 'JoomSEO' );
function JoomSEO($published, &$row, &$params, $page=0) {
global $database, $mainframe, $mosConfig_MetaKeys, $mosConfig_MetaDesc, $mosConfig_sitename;
// perform a published check
if (!$published) {
return;
}
// get our bot parameters
$query = "SELECT id FROM #__mambots WHERE element = 'JoomSEO' AND folder = 'content'";
$database->setQuery($query);
$id = $database->loadResult();
// get our mambot object
$mambot = new mosMambot($database);
$mambot->load($id);
$botParams = new mosParameters($mambot->params);
// load all our vars
//Title
$titleLength = $botParams->get('titleLength', false);
$titleOrder = $botParams->get('titleOrder', 1);
$prependTitle = $botParams->get('prependTitle', false);
$appendTitle = $botParams->get('appendTitle', false);
// site name
$showTitleSiteName = $botParams->get('showTitleSiteName', true);
$overrideSiteName = $botParams->get('overrideSiteName', false);
// content / heading title
$showContentHeading = $botParams->get('showContentHeading', true);
// paragraph
$showFirstParagraph = $botParams->get('showFirstParagraph', false);
$paragraphMinLength = $botParams->get('paragraphMinLength', 20);
$paragraphLength = $botParams->get('paragraphLength', 50);
// keywords
$showTitleKeywords = $botParams->get('showTitleKeywords', true);
$overrideTitleKeywords = $botParams->get('overrideTitleKeywords', false);
$keywordMinCharacters = $botParams->get('keywordMinCharacters', 3);
$titleKeywordQuantity = $botParams->get('titleKeywordQuantity', 5);
// meta
$metaKeywordsCount = $botParams->get('metaKeywordsCount', 50);
$metaDescriptionMinLength = $botParams->get('metaDescriptionMinLength', 80);
$metaDescriptionLength = $botParams->get('metaDescriptionLength', 150);
// filter
// when bot was first installed these were not being added unless bot was *saved*
$defStickWords = "";
$stickyWords = $botParams->get('stickyWords', $defStickWords);
$defBadWords = "0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z about an are as at be by com de en for from how in is it its la of on or that the this to was what when where who will with und the www and all has been your us up youll can if youve do know we not many you our but there they then more";
$badWords = $botParams->get('badWords', $defBadWords);
$defBadCharacters = "0 1 2 3 4 5 6 7 8 9 > < & - , . ; : ) ( ? ! { } [ ] / ' " %";
$badCharacters = $botParams->get('badCharacters', $defBadCharacters);
// bot activation
$disableFrontpage = $botParams->get('disableFrontpage', false);
// activation specific
$disableFrontpageTitle = $botParams->get('disableFrontpageTitle', false);
$disableFrontpageKeywords = $botParams->get('disableFrontpageKeywords', false);
$disableFrontpageDescription = $botParams->get('disableFrontpageDescription', false);
// front page overrides. Front page or corresponding item must be enabled though
$overrideFrontPageTitle = $botParams->get('overrideFrontPageTitle', false);
$overrideFrontPageKeywords = $botParams->get('overrideFrontPageKeywords', false);
$overrideFrontPageDescription = $botParams->get('overrideFrontPageDescription', false);
// SEO / Accessability
// defaulted to false to as not to break existing templates
$addHeadingTags = $botParams->get('addHeadingTags', false);
// current settings
$currentTitle = gettitle();
$currentContentHeading = $row->title;
$currentMetaKeys = $mosConfig_MetaKeys;
$currentMetaDesc = $mosConfig_MetaDesc;
// added to limit sql queries
$isFrontPage = IsFrontPage();
// firstly add our generator tag.
// please leave this here as it will not affect seo
// and gives my countless hours of programming an idea of use.
global $beenHere;
if (!$beenHere) {
// add JoomSEO bot to Generator meta
ReplaceMeta('Generator', ' JoomSEO by Phill Brown (http://www.joomseo.com).');
}
// encompass our headings with hX tags
// added first as we want this active even if the front page is disabled
if ($addHeadingTags) {
$row->title = AddHeadingTags($row->title, $addHeadingTags);
}
// check if we are enabled on the front page
if (($isFrontPage) && ($disableFrontpage)) {
// removed after added front page overrides and specific disabled attributes
// were added after release 0.9
//if ($disabledFrontPageTitle) {
// apply replacement text instead of joomla default
// replacetitle($disabledFrontPageTitle);
//}
// exit from this bot
return;
}
// clean and organise our text
$text = PrepareText($row->text);
// all CleanChars() no longer used as it was stopping other languages from operating proplerly
//$text = CleanChars($text);
$stickyWords = PrepareText($stickyWords);
//$stickyWords = CleanChars($stickyWords);
$badWords = PrepareText($badWords);
//$badWords = CleanChars($badWords);
$badCharacters = PrepareText($badCharacters);
//$badCharacters = CleanChars($badCharacters);
// clear existing meta keywords and descriptions
$mosConfig_MetaKeys = "";
$mosConfig_MetaDesc = "";
// was thinking of adding later a check to use only first article or all articles
// this get the total content from all articles from a com_frontpage
global $botSefText;
$botSefText .= $text;
// get our site name
// added to get the site title once
global $newSiteName;
//$newSiteName = null;
if (!$newSiteName) {
if ($showTitleSiteName) {
$newSiteName = $mosConfig_sitename;
if ($overrideSiteName) {
$newSiteName = $overrideSiteName;
}
}
}
// get our content heading
// added this to get first heading
global $newContentHeading;
//$newContentHeading = null;
if (!$newContentHeading) {
if ($showContentHeading) {
$newContentHeading = $currentContentHeading;
}
}
// get our first paragraph
// added to get the paragraph once only
global $newFirstParagraph;
//$newFirstParagraph = null;
if (!$newFirstParagraph) {
if ($showFirstParagraph) {
$newFirstParagraph = trim(GetDescription($botSefText, $paragraphMinLength, $paragraphLength));
}
}
// get our title keywords
// no global as we need this to parse all keywords
$newTitleKeywords = null;
if ($showTitleKeywords) {
$newTitleKeywords = GlueItems(GetKeywords($botSefText,$keywordMinCharacters,$titleKeywordQuantity,$stickyWords,$badWords,$badCharacters));
if ($overrideTitleKeywords) {
$newTitleKeywords = GlueItems(GetKeywords($overrideTitleKeywords));
}
}
// sort our title
$titleArray = array();
Push($titleArray, $prependTitle);
switch ($titleOrder) {
case 1://
Push($titleArray, $newSiteName);
if ($newContentHeading != null) {
Push($titleArray, ($newFirstParagraph) ? $newContentHeading ." - ". $newFirstParagraph : $newContentHeading);
} else {
Push($titleArray, $newFirstParagraph);
}
Push($titleArray, $newTitleKeywords);
break;
case 2://
Push($titleArray, $newSiteName);
Push($titleArray, $newTitleKeywords);
if ($newContentHeading != null) {
Push($titleArray, ($newFirstParagraph) ? $newContentHeading ." - ". $newFirstParagraph : $newContentHeading);
} else {
Push($titleArray, $newFirstParagraph);
}
break;
case 3://
if ($newContentHeading != null) {
Push($titleArray, ($newFirstParagraph) ? $newContentHeading ." - ". $newFirstParagraph : $newContentHeading);
} else {
Push($titleArray, $newFirstParagraph);
}
Push($titleArray, $newSiteName);
Push($titleArray, $newTitleKeywords);
break;
case 4://
if ($newContentHeading != null) {
Push($titleArray, ($newFirstParagraph) ? $newContentHeading ." - ". $newFirstParagraph : $newContentHeading);
} else {
Push($titleArray, $newFirstParagraph);
}
Push($titleArray, $newTitleKeywords);
Push($titleArray, $newSiteName);
break;
case 5://
Push($titleArray, $newTitleKeywords);
Push($titleArray, $newSiteName);
if ($newContentHeading != null) {
Push($titleArray, ($newFirstParagraph) ? $newContentHeading ." - ". $newFirstParagraph : $newContentHeading);
} else {
Push($titleArray, $newFirstParagraph);
}
break;
case 6://
Push($titleArray, $newTitleKeywords);
if ($newContentHeading != null) {
Push($titleArray, ($newFirstParagraph) ? $newContentHeading ." - ". $newFirstParagraph : $newContentHeading);
} else {
Push($titleArray, $newFirstParagraph);
}
Push($titleArray, $newSiteName);
break;
}
Push($titleArray, $appendTitle);
if ($titleLength) {
$newTitle = substr(implode(' | ', $titleArray),0,$titleLength);
} else {
$newTitle = implode(' | ', $titleArray);
}
// its the front page so do front page specific handling
if ($isFrontPage) {
// get our frontpage title
if ($disableFrontpageTitle) {
// use the joomla generated title
$newTitle = $currentTitle;
} else {
$newTitle = ($overrideFrontPageTitle) ? $overrideFrontPageTitle : $newTitle;
}
// get our frontpage keywords
if ($disableFrontpageKeywords) {
// use the joomla default
$metaKeywords = $currentMetaKeys;
} else {
$metaKeywords = ($overrideFrontPageKeywords) ? $overrideFrontPageKeywords : GlueItems(GetKeywords($botSefText,$keywordMinCharacters,$metaKeywordsCount,$stickyWords,$badWords,$badCharacters));
}
// get our frontpage description
if ($disableFrontpageDescription) {
// use the joomla default
$metaDescription = $currentMetaDesc;
} else {
$metaDescription = ($overrideFrontPageDescription) ? $overrideFrontPageDescription : GetDescription($botSefText, $metaDescriptionMinLength, $metaDescriptionLength);
}
} else {
// we are on any other page so perform normal operations
$metaKeywords = GlueItems(GetKeywords($botSefText,$keywordMinCharacters,$metaKeywordsCount,$stickyWords,$badWords,$badCharacters));
$metaDescription = GetDescription($botSefText, $metaDescriptionMinLength, $metaDescriptionLength);
}
replacetitle($newTitle);
ReplaceMeta('keywords', $metaKeywords);
ReplaceMeta('description', $metaDescription);
// set our been here status
$beenHere = true;
}
/**
* Add an item to our array
*
* @param array $stack
* @param text $var
*/
function Push(&$stack, $var) {
if ($var) {
array_push($stack, $var);
}
}
/**
* Add H1, H2, H3... tags to text
*
* @param string $title
* @param int $num
* @return string
*/
function AddHeadingTags($title, $num) {
return "$title";
}
/**
* Checks if current page is Joomla front page
*
* @return unknown
*/
function IsFrontPage() {
global $database;
global $Itemid;
// if we have no option then we should have arrived at the front page of the site.
// sef url mapping bypasses this but is caught below
if (mosGetParam($_GET,'option','') == '') {
return true;
}
// get the first menu item in mainmenu as this is the front page in joomla
$query = "SELECT * from #__menu WHERE menutype = 'mainmenu' AND published = '1' ORDER BY ordering LIMIT 1";
$database->setQuery($query);
$row = null;
$database->loadObject($row);
if ($Itemid == $row->id) {
return true;
}
return false;
}
/**
* Replaces current Joomla meta tag
* code based from joomla.php
*
* @param string $name
* @param string $content
*/
function ReplaceMeta($name, $content) {
global $mainframe;
$name = trim(htmlspecialchars($name));
$n = count($mainframe->_head['meta']);
for ($i = 0; $i < $n; $i++) {
if ($mainframe->_head['meta'][$i][0] == $name) {
$content = trim(htmlspecialchars($content));
if ($content) {
$mainframe->_head['meta'][$i][1] = $content;
}
return;
}
}
$mainframe->addMetaTag($name, $content);
}
/**
* Get current meta content
* code based from joomla.php
*
* @param string $name
* @return string
*/
function GetMeta($name) {
global $mainframe;
$name = trim(htmlspecialchars($name));
$n = count($mainframe->_head['meta']);
for ($i = 0; $i < $n; $i++) {
if ($mainframe->_head['meta'][$i][0] == $name) {
return $mainframe->_head['meta'][$i][1];
}
}
}
/**
* Get a string of formatted keywords
*
* @param array key=>value $items
* @return string
*/
function GlueItems($items) {
// as format is in a $key=>$value pair extract the keys
$keys = array_keys($items);
// glue our array into a single string
$ret = implode(', ', $keys);
return $ret;
}
/**
* Replace current title
*
* @param string $content
*/
function replacetitle($content) {
global $mainframe;
$mainframe->_head['title'] = $content;
}
/**
* Append to current title
*
* @param string $content
*/
function appendtitle($content) {
global $mainframe;
$mainframe->_head['title'] .= $content;
}
/**
* Get the current title
*
* @return string
*/
function gettitle() {
global $mainframe;
return $mainframe->_head['title'];
}
/**
* Gets the description for the meta description tag
* uses the sentence inside $minLength and $maxLength
* or sentence... if sentence is bigger than $maxLength
*
* @param string $text
* @param int $minLength
* @param int $maxLength
* @return string
*/
function GetDescription($text, $minLength = 100, $maxLength = 250) {
if ($minLength > $maxLength) return;
if (!$text) return;
// previously sentences including 'Joomla 1.0' was stopping at "Joomla 1." therefor the philosophy has changed here.
// we want a minumim of $minLength chars and a max of $maxLength chars, stopping at a sentence inbetween.
// get pos of '.'
$stop = strpos($text,'.');
if (($stop >= $minLength) && ($stop <= $maxLength)) {
// display the full sentence as it is
$desc = trim(substr($text,0,$stop + 1));
} else {
// display the sentence cut short
$desc = trim(substr($text, 0, $maxLength -3))."...";
}
return ucfirst($desc);
}
/**
* Returns an array of keywords
*
* @param string $text
* @param int $keywordMinCharacters
* @param int $top
* @param string $stickyWords
* @param string $badWords
* @param string $badCharacters
* @param bool $capitalise
* @param char $delim
* @return array key=>value
*/
function GetKeywords($text, $keywordMinCharacters = 1, $top = 0, $stickyWords = null, $badWords = null, $badCharacters = null, $capitalise = true, $delim=" ") {
$text = strtolower($text);
// remove any email addresses
$regex = '/(([_A-Za-z0-9-]+)(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-]+)(\\.[A-Za-z0-9-]+)*)/iex';
$replacement = ' ';
$text = preg_replace($regex, $replacement, $text);
// remove and unwanted characters
$badCharacters = explode($delim, $badCharacters);
foreach ($badCharacters as $badChar) {
$text = str_replace ($badChar, null, $text);
}
// remove any unwanted words
$badWords = explode($delim,$badWords);
$firstWord = substr($text, 0, (strpos($text, " ")) +1);
$lastWord = substr($text , strrpos($text, " "));
foreach ($badWords as $badWord) {
// remove all instances at the beginning
if (strcasecmp("$badWord ",$firstWord) == 0) {
$text = substr($text, strlen($firstWord));
}
// remove all instances in the middle
$text = Replace(" $badWord ", " ", $text);
// remove all instances at the end
if (strcasecmp(" $badWord", $lastWord) == 0) {
$text = substr($text, 0, strlen($text) - strlen($lastWord));
}
}
// capitalise our text
if ($capitalise == true) {
$text = ucwords($text);
$stickyWords = ucwords($stickyWords);
}
$wordCount = array();
// add our stickywords
$stickyWords = explode($delim,$stickyWords);
foreach ($stickyWords as $stickyWord) {
$wordCount[$stickyWord]=1;
}
// loop through all our words and count instances
$words = explode($delim,$text);
foreach ($words as $word) {
$word = trim($word);
// after all checking was still getting null chars from somewhere
if (($word != null) && (strlen($word) >= $keywordMinCharacters)) {
// check that word already has been added
if (array_key_exists($word,$wordCount)) {
// it does so add to our count
$wordCount[$word] += 1;
} else {
// it doesnt so put it in once
$wordCount[$word] = 1;
}
}
}
// sort the new word array
@arsort($wordCount);
$ret = array();
// return all elements
if ($top == 0) {
return $wordCount;
}
// return the top X number of elements
if ($top < count($wordCount)) {
$ret = array_slice($wordCount, 0, $top);
} else {
$ret = $wordCount;
}
//foreach ($wordCount as $key=>$val) {
// echo "Key: $key Value: $val ";
//}
return $ret;
}
/**
* Clean and prepare text, remove any unwanted tags etc
*
* @param string $text
* @return string
*/
function PrepareText($text) {
// removed as redundant from strip_tags
// and was causing parsing problems due to incorrect regex.
// regex is fixed for the sake of being fixed.
// convert html br to space
/*$regex = '/()/i';*/
//$text = preg_replace($regex, " ", $text);
// remove links
/*$regex = '/()(.*?)(<\/a>)/i';*/
//$text = preg_replace($regex, " $2 ", $text);
// convert html entities to chars
$text = html_entity_decode($text, ENT_QUOTES);
// strip any remaining html tags
$text = strip_tags($text);
// remove any mambot codes
$regex = '(\{.*?\})';
$text = preg_replace($regex, " ", $text);
// convert tabs to spaces
// added below
//$text = str_replace("\t", " ",$text);
// convert newlines and tabs to spaces
$text = str_replace(array("\r\n", "\r", "\n", "\t"), " ", $text);
// remove any extra spaces
while (strchr($text," ")) {
$text = str_replace(" ", " ",$text);
}
// general sentence tidyup
for ($cnt = 1; $cnt < strlen($text); $cnt++) {
// add a space after any full stops or comma's for readability
// added as strip_tags was often leaving no spaces
if (($text{$cnt} == '.') || ($text{$cnt} == ',')) {
if (isset($text{$cnt+1})) {
if ($text{$cnt+1} != ' ') {
$text = substr_replace($text, ' ', $cnt + 1, 0);
}
}
}
}
return trim($text);
}
/**
* Removes any non readable characters
*
* @param string $text
* @return string
*/
function CleanChars($text) {
for ($cnt=0; $cnt < strlen($text); $cnt++) {
$chr = $text{$cnt};
$ord = ord($chr);
if ($ord < 32 or $ord > 126) {
$chr = " ";
$text{$cnt} = $chr;
}
}
return $text;
}
/**
* Case insensitive replace
*
* @param string $search
* @param string $replace
* @param string $subject
* @return string
*/
function Replace($search, $replace, $subject, $word = false) {
if ($word) {
$regex = "/\b$search\b/i";
} else {
$regex = "/$search/i";
}
return preg_replace($regex, $replace, $subject);
}
?>
Оральный секс
Автор Administrator
15.12.2008 г.
На тему орального секса "ломаются копья" не первый год. У женщин и
мужчин на этот вопрос взгляды неизменно различные и только в одном они
сходились всегда. Оральные ласки получать всегда чрезвычайно приятно. И
соответственно тема для обсуждения будет всегда актуальной.
Оральный секс известен издавна. Мы найдем его и на страницах
Камасутры (он здесь называется мухаметхуна ("вращение ртом") и
амбарчузи ("лизание фрукта манго") и в древних арабских историях об
одалисках и в чувственных выгравированных на пластинах рисунках -
гравюрах Древнего Китая и Японии.
Древние греки, мастера по части сексуальных игр, привнесли нашу
обыденную жизнь фразу – "играть на флейте", а римские поэты Луциан и
Марциал в своих поэмах описывали сцены с оральными ласками. В смутные
времена Средневековья инквизиция приравняла оральный секс к
содомитскому греху, связывая ее распространение исключительно с
гомосексуальными связями. А в это время на Востоке, особенно в арабской
его части, оральный секс ценили за незабываемые ощущения
и считали, что оральное возбуждение дает самое острое и сильное
наслаждение. Отсюда и выражение "арабский сластолюбец",
распространенное в чопорной Европе.
Считается, что современная мода на оральный секс была введена Джакомо Казановой, описавшим прелести минета в своих мемуарах.
Радует одно, что сегодня в обществе принято говорить об оральном сексе
в открытую. Мы не скрываем своего желания получать удовольствие именно
этим способом, и никто не бросит в нас камень за излишнюю
откровенность, но это происходит не везде. Так, в некоторых штатах США
действуют законы против орального секса как преступления против
природы. И, несмотря на это именно в США возник самый громкий оральный
скандал современности в котором был замешан один из самых
могущественных людей планеты - президент Клинтон.
Оральный секс не уступает по популярности классическому генитальному
варианту. Многочисленные исследования и опросы показали, что более 90%
супружеских пар практикуют орально-генитальный секс. При этом многие
пары признаются, что начали заниматься им после определенного стажа
половой жизни, возможно потому, что все преимущества орального контакта
трудно оценить в подростковом периоде в силу своей психологической и
сексуальной незрелости.
Как для мужчин, так и для женщин оральный контакт решает помимо
прочего и множество других вопросов. Ну, во-первых доказано, что минет
отличное лекарство от бессонницы, после него партнеры быстрее засыпают
их нервная система более расслаблена а продолжительность сна становится
оптимальной. Во время орального секса мужчина получает массу полезных ферментов,
которые положительно действуют на весь организм – улучшается сердечный
ритм, кровообращение, укрепляется иммунитет. К тому же мужчина во время
куннилингуса "высасывает" небольшую дозу полезных гормонов, которые
хорошо влияют и на эрекцию. Говорят, после него реже мучают ночные
кошмары и отступают навязчивые состояния.
Но это медицинские факты, а жизнь показывает, что большинство мужчин
ценят партнерш, виртуозно владеющих техникой минета, и соответственно
вероятность измен уменьшается пропорционально возрастанию оральной
техники партнерши. Что же касается прекрасной половины человечества, то
продвинутые дамы знают, что в мужской сперме содержится множество
натуральных липидов и важных аминокислот на натуральной гелевой основе,
которые входят в состав косметических средств для ухода за кожей.
Поэтому они и стараются не уклоняться от попадания спермы на лицо и
кожу во время эякуляции.
И все же такая популярность орального секса, прежде всего,
основывается на ощущениях партнеров. Большинство пар видят в них
доказательства подлинных чувств того, что любимый человек принимается
во всех его доскональностях, деталях, при полном интиме и тонкостях.
Многие женщины любят именно клиторальный оргазм, зачастую более острый,
чем его вагинальный собрат. Кроме этого во время полового акта,
куннилингус позволяет довести возбуждение женщины (которое, как
правило, отстаёт от такового у мужчины) до такого высокого уровня,
когда шансы на оргазм у женщины повышаются. Поэтому и ценят дамы мужчин
умеющих доставлять им оральное удовольствие. Для мужчин же, часто,
оральный секс - это не только способ получить незабываемое
удовольствие, но и (к сожалению, в наше наполненное стрессами и
преждевременно убивающее потенцию время) средство помогающее избежать
фиаско в постели. Минет отличное средство возбудить партнера. А иногда единенная возможность заняться сексом в принципе!!!
Еще одним преимуществом орального контакта является меньшая
вероятность заразиться венерической болезнью. Многие врачи считают, что
ВИЧ инфекция не передается со слюной, и, конечно же, дополнительную
защиту гарантирует недопущение попадания спермы в рот. Однако полностью
исключить передачу ЗПП нельзя. Как и вагинальный секс, он имеет свои
требования к безопасности. Гонорея, сифилис и очень неприятная штука по
имени герпес могут появиться при халатном отношении к своему здоровью.
Врачи утверждают, что даже обычный герпес на губах при половом контакте
может спровоцировать трудноизлечимый генитальный герпес. Неплохим
способом защиты от инфекций считается применение антисептиков:
мирамистина, гибитана и др. в первые два часа после полового акта.
Warning: include_once(/home/mshouse/domains/sdvigov.net/public_html/includes/foot2er.php) [function.include-once]: failed to open stream: No such file or directory in /home/mshouse/domains/sdvigov.net/public_html/templates/sdvigov/index.php on line 194
Warning: include_once() [function.include]: Failed opening '/home/mshouse/domains/sdvigov.net/public_html/includes/foot2er.php' for inclusion (include_path='.:/usr/local/php5/lib/php') in /home/mshouse/domains/sdvigov.net/public_html/templates/sdvigov/index.php on line 194