Этим запросом можно наполнить таблицу с SEO описанием для модуля DLE CatFace для категорий,
ПО шаблону заданному в SQL
Continue reading
Рубрика: Web
PHP скрипт конвертации Mysql InnoDB в ENGINE MyISAM.
Этот PHP скрипт позволит вам сконвертировать все таблицы InnoDB доступные пользователю $dbuser на сервере mysql из InnoDB в БД ENGINE MyISAM.
Continue reading
Cross Domain Ajax Json запрос
И так, самый простой способ это использовать в хидере
<?php header("access-control-allow-origin: *"); ?>
давайте рассмотрим пример, и так, пускай у на на сайте http://example.com есть страница test.php:
<?php $data = array(1, 2, 3, 4, 5, 6, 7, 8, 9); header("access-control-allow-origin: *"); echo json_encode($data); ?>
На другом сайте при помощи js скрипта забираем данные
<script type="text/javascript" id="js"> $.ajax({ url:"http://example/test.php", dataType: 'json', // Notice! JSONP <-- P (lowercase) success:function(json){ // do stuff with json (in this case an array) alert("Success"); }, error:function(){ alert("Error"); }, }); </script>
Php Проверка ссылка на доступность
Небольшой php скрипт который проверяет доступность ссылки, для меня приемлемыми были ответы 200,301,302,403,405:
<?php function is_valid_url($url) { $timeout = 10; $ch = curl_init($url); // Set request options curl_setopt_array($ch, array( CURLOPT_FOLLOWLOCATION => true, CURLOPT_NOBODY => true, CURLOPT_TIMEOUT => $timeout, CURLOPT_USERAGENT => "page-check/1.0" )); // Execute request curl_exec($ch); if(curl_errno($ch)) { curl_close($ch); return false; } $url = @parse_url($url); if ( ! $url) { return false; } $url = array_map('trim', $url); $url['port'] = (!isset($url['port'])) ? 80 : (int)$url['port']; $path = (isset($url['path'])) ? $url['path'] : ''; if ($path == '') { $path = '/'; } $path .= ( isset ( $url['query'] ) ) ? "?$url[query]" : ''; if ( isset ( $url['host'] ) AND $url['host'] != gethostbyname ( $url['host'] ) ) { $headers = get_headers_curl("$url[scheme]://$url[host]:$url[port]$path"); $headers = ( is_array ( $headers ) ) ? implode ( "\n", $headers ) : $headers; preg_match_all ( '#^HTTP/.*\s+[0-9]+\s#i', $headers,$match ); $tmp = explode(' ',$match[0][0]); //print_r($tmp); $code = array(200,301,302,403,405); if(in_array($tmp[1],$code)){ return true ; } } return false; } ?>
phpbb 3.0.X отправка, редактирование, удаление сообщений от нескольких пользователей
Моей супруге понадобился форум, и уж очень ей хотелось, что бы была возможность отправлять сообщения от нескольких пользователей без прелогинивания. Я если честно с phpbb работал не много, и не знаю, насколько грамотно реализовал данную функцию, но реализовал. И так. первое, что мы делаем, это добавляем в таблице _users(у меня phpbb_users) новую колонку —
В этой колонке мы будем указывать id пользователя из профиля которого будет возможность работать от лица данного профиля. Как пример, у нас есть пользователь Admin, его id = 1, и есть пользователь Edd, мы хотим, дать возможность пользователю Admin работать от лица пользователя Edd, для этого в столбце user_id_sec напротив пользователя Edd ставится 1.
user_id user_id_sec username 2 0 Admin 3 2 Edd
Теперь, открываем файл include/functions_display.php, ищем —
и добавляем
и внизу этой функции добавляем:
$current = request_var($config['cookie_name'] . '_u', '', false, true); if ($current){ $template->assign_block_vars('custom_name_me', array( 'NAME_ME_VALUE' => $current, 'NAME_ME_TITLE' => 'Текущий', 'NAME_ME_SELECT' => 'selected="selected"' )); $sql = 'SELECT user_id,username FROM ' . USERS_TABLE . " WHERE user_id_sec = '" .$current. "'"; $result = $db->sql_query($sql); while ($row = $db->sql_fetchrow($result)) { $template->assign_block_vars('custom_name_me', array( 'NAME_ME_VALUE' => $row['user_id'], 'NAME_ME_TITLE' => $row['username'], 'NAME_ME_SELECT' => '' )); } }
Дальше открываем posting_buttons.html вашего стиля и в самом низу перед
</div> <!-- ENDIF -->
вставляем
<br /> <select name="change_me" title="Change me"> <!-- BEGIN custom_name_me --> <option {custom_name_me.NAME_ME_SELECT} value="{custom_name_me.NAME_ME_VALUE}">{custom_name_me.NAME_ME_TITLE}</option> <!-- END custom_name_me --> </select>
Дальше, открываем viewtopic.php, ищем
$edit_allowed = ($user->data['is_registered'] && ($auth->acl_get('m_edit', $forum_id) || ( $user->data['user_id'] == $poster_id && $auth->acl_get('f_edit', $forum_id) && !$row['post_edit_locked'] && ($row['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time']) ))); //echo $user->data['user_id']; $delete_allowed = ($user->data['is_registered'] && ($auth->acl_get('m_delete', $forum_id) || ( $user->data['user_id'] == $poster_id && $auth->acl_get('f_delete', $forum_id) && $topic_data['topic_last_post_id'] == $row['post_id'] && ($row['post_time'] > time() - ($config['delete_time'] * 60) || !$config['delete_time']) && // we do not want to allow removal of the last post if a moderator locked it! !$row['post_edit_locked'] )));
и меняем на:
$sql_sec_id = 'SELECT user_id,username FROM ' . USERS_TABLE . " WHERE user_id_sec = '" .$user->data['user_id']. "'"; $result_sec_id = $db->sql_query($sql_sec_id); $sec_id_user = array(); while ($row_sec_id = $db->sql_fetchrow($result_sec_id)) { $sec_id_user[] = $row_sec_id['user_id']; } $edit_allowed = ($user->data['is_registered'] && ($auth->acl_get('m_edit', $forum_id) || ( ($user->data['user_id'] == $poster_id || in_array($poster_id,$sec_id_user)) && $auth->acl_get('f_edit', $forum_id) && !$row['post_edit_locked'] && ($row['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time']) ))); //echo $user->data['user_id']; $delete_allowed = ($user->data['is_registered'] && ($auth->acl_get('m_delete', $forum_id) || ( ($user->data['user_id'] == $poster_id || in_array($poster_id,$sec_id_user)) && $auth->acl_get('f_delete', $forum_id) && $topic_data['topic_last_post_id'] == $row['post_id'] && ($row['post_time'] > time() - ($config['delete_time'] * 60) || !$config['delete_time']) && // we do not want to allow removal of the last post if a moderator locked it! !$row['post_edit_locked'] )));
Далее идем в posting.php, ищем:
if ($mode == 'edit' && !$auth->acl_get('m_edit', $forum_id)) { if ($user->data['user_id'] != $post_data['poster_id'])
и меняем на
$sql_sec_id = 'SELECT user_id,username FROM ' . USERS_TABLE . " WHERE user_id_sec = '" .$user->data['user_id']. "'"; $result_sec_id = $db->sql_query($sql_sec_id); $sec_id_user = array(); while ($row_sec_id = $db->sql_fetchrow($result_sec_id)) { $sec_id_user[] = $row_sec_id['user_id']; } if ($mode == 'edit' && !$auth->acl_get('m_edit', $forum_id)) { if ($user->data['user_id'] != $post_data['poster_id'] && !in_array($post_data['poster_id'],$sec_id_user)) { trigger_error('USER_CANNOT_EDIT'); }
в начале файла, там где описываются переменные перед
добавляем
FROM ‘ . USERS_TABLE . «
WHERE user_id = ‘» .$current_id. «‘»;
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
$current_new_name = $row[‘username’];
}
в этом же файле ищем функцию
и добавляем в начале:
в этой функции ишем
if ($auth->acl_get('m_delete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_delete', $forum_id) && $post_id == $post_data['topic_last_post_id'] && !$post_data['post_edit_locked'] && ($post_data['post_time'] > time() - ($config['delete_time'] * 60) || !$config['delete_time'])))
и меняем на
if ($auth->acl_get('m_delete', $forum_id) || (($post_data['poster_id'] == $user->data['user_id'] || in_array($post_data['poster_id'],$sec_id_user)) && $user->data['is_registered'] && $auth->acl_get('f_delete', $forum_id) && $post_id == $post_data['topic_last_post_id'] && !$post_data['post_edit_locked'] && ($post_data['post_time'] > time() - ($config['delete_time'] * 60) || !$config['delete_time'])))
Финальный штрих, в файле include/function_posting.php ищем
в начале функции добавляем
и меняем в этой функции
на
в этом же массиве
на
в этой же функции находим
и меняем на
и еще одно
заменить
Вот и все.
Автоматически генерируем тумбнейлы для Youtube роликов и используем их вместе с Lytebox
Итак, есть задача, на сайте выводятся Youtube роликивот в таком формате:
Роликов на одной странице много, и что бы не нагружать пользователей их загрузкой, было принято решение подменять их ссылками в виде тумбнейлов, при клике на которые Lytebox будет выводить ролик в отдельном div-е. При этом формат размещения данных никто менять не хотел, вот что получилось:
<? // $post_new - сообщение которое мы будем обрабатывать $post_new= 'Ролик №1:<br> <iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/ajNC3W-Dlqk" frameborder="0" allowfullscreen></iframe><br> Ролик №2:<br> <iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/c4XPVvMm4j4" frameborder="0" allowfullscreen></iframe>'; // Папка для тумбнейлов $folder = 'cache'; preg_match_all('/src=[\'"]?([^\'" >]+)[\'" >]/', $post_new, $img); foreach($img[1] as $key => $link){ $tmp_link = explode('/',$link); $file = explode('.',array_pop($tmp_link)); if($tmp_link[2] == 'www.youtube.com'){ $name = &$file[0]; $new_link = 'src="'.$folder.'/'.$name.'_tumb.jpg"'; if (!file_exists($folder.'/'.$name.'_tumb.jpg')) { $homepage = file_get_contents('http://img.youtube.com/vi/'.$name.'/0.jpg'); file_put_contents($folder.'/'.$name.'_tumb.jpg' , $homepage); $homepage = @imagecreatefromjpeg($folder.'/'.$name.'_tumb.jpg'); $im = @imagecreatefrompng('images/play.png'); $watermark_width = imagesx($homepage); $watermark_height = imagesy($im); $alpha_level = 60; //Добавляем вотермарк imagecopymerge($homepage, $im, 0, 0, 0, 0, 480, 360, $alpha_level); imagejpeg($homepage,$folder.'/'.$name.'_tumb.jpg',75); } $replace = '<iframe title="YouTube video player" width="480" height="390" src="'.$link.'" frameborder="0" allowfullscreen></iframe>'; //echo $replace; $post_new = str_replace($replace,'<a href="'.$link.'" class="lytebox" data-lyte-options="width:560 height:349"><img '.$new_link.'/></a>',$post_new); } } ?>
Используемый мною вотермарк
Демонстрация работы скрипта
Php переводим при помощи Google
Используя специальный api вы можете переводить текст вашего сайта «на лету». Для этого вам понадобиться следующая функция:
<?php function gtranslate($s_text, $s_lang, $d_lang){ //определяем переменную, которая содержит api url Google Translate $url = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=".urlencode($s_text) ."&langpair=".urlencode($s_lang.'|'.$d_lang); $c = curl_init(); curl_setopt($c, CURLOPT_URL, $url); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_REFERER, "http://teaseo.ru"); $b = curl_exec($c); curl_close($c); $json = json_decode($b, true); if ($json['responseStatus'] != 200)return false; return $json['responseData']['translatedText']; } ?>
Использовать можно так :
Php PDO работаем с MySQL
Кто-то пишет свой набор функций для работы с MySQL, кто-то работает с фреймворками где обычно есть полный набор необходимых инструментов, а мне вот например нравиться PDO. И так, для подключения к базе —
<?php $dbhost ='localhost'; // username and password to log onto db server $dbuser ='user'; $dbpass ='password'; // name of database $dbname='base'; //Charset $sqlchar='utf8'; $db = new PDO ( 'mysql:host=' . $dbhost . ';dbname=' . $dbname, $dbuser, $dbpass); $db->query ( 'SET character_set_connection = '.$sqlchar ); $db->query ( 'SET character_set_client = '.$sqlchar ); $db->query ( 'SET character_set_results = '.$sqlchar ); ?>
Получаем одну строку:
Все строки
Определения кода ошибки
print_r($ercode);
Определения последнего ID
Определение количества строк
Вставить новую строку, если данные хранятся в массиве $t в формате $t[название столбца] = данные
Изменяем строку
Для того что бы проверить подключены ли модуль php-pdo и php-pdo_mysq:
<?php if ( !extension_loaded('pdo') ){ .... }elseif ( !extension_loaded('pdo_mysql') ) { .... } ?>
Js Spoiler или исчезающие div-ы
И так, пускай нам нужно по клику прятать и открывать контент. Демка скрипта Для этого можно использовать следующий скрипт:
<script language="javascript"> function toggle_start() { var ele = document.getElementById("toggleStart"); var text = document.getElementById("displayStart"); if(ele.style.display == "block") { ele.style.display = "none"; text.innerHTML = "Start"; } else { ele.style.display = "block"; text.innerHTML = "Start"; } } </script>
Размещаем данный скрипт в body. Далее нам нужна ссылка нажимая на которую мы будем показывать и прятать содержимое:
и теперь сам контент:
START! START! START!
</div>
JS обновляем кусочек кода с помощью jquery и ajax
И так, предположим, что вам необходимо с определенным интервалом обновлять определенный кусочек кода, сделать это можно при помощи jquery. Посмотреть демку. Для это как всегда качаем jquery отсюда. Подключаем:
<script type="text/javascript" src="js/jquery.js"></script>
Далее сам скрипт:
<script type="text/javascript"> $(document).ready(function() { $("#load").load("http://teaseo.ru/demo/time.php"); var refreshId = setInterval(function() { $("#load").load('http://teaseo.ru/demo/time.php'); }, 30000); $.ajaxSetup({ cache: false }); }); </script>
где http://teaseo.ru/demo/time.php это обновляемый контент, а 30000 это время обновления в миллисекундах
Контент будет выведен в: