PHP

’рубрика’

Полная Лента для Гостей в EasySocial

Февраль 7, 2015

По-умолчанию в социальной сети EasySocial лента новостей отображает последние N записей, кнопки переключения между страницами отсутствуют. С одной стороны хорошо, внизу посетитель сайта видит предложение зарегистрироваться, с другой, мы теряем потенциального читателя и более того, наносим ущерб SEO, а точнее ограничиваем сайт от полноценной индексации его поисковыми системами. Поисковый робот попросту не видит соседних страниц и не знает об их существовании, как и записей, ссылки на которые там присутствуют.

Оригинального решения в настройках от StackIdeas нет. Для решения потребуется самостоятельно отредактировать 3 исходных файла системы и один шаблон.

Кому интересно, пишите на почту через Контакты. Стоимость решения: 10 USD.

Tags: ,
Записано в PHP, Программирование    |    Постоянная ссылка

Решение проблемы imagepng pChart permissions denied

Май 3, 2013

Анализируя ошибки, которые возникали на сервере, заметил PHP Warning - "imagepng ... permissions denied" при работе pChart 2.0. График должен был записаться в папку с правами 777, но файл там уже был и прав 644 на перезапись не хватало. Выделять 777 на файлы не хотелось, хотя вариант рабочий.

Решением стало определение группы владельца и группы www (пользователь, под которым работает Apache) для нужной папки. Прав на нее теперь хватает 755, а на файлы 644.

Tags:
Записано в Linux, PHP, Программирование    |    Постоянная ссылка

О поисках ошибки в невалидном XML

Ноябрь 20, 2012

Необходимо было перенести информацию из 10 XML файлов в базу данных. В каждом файле по 500 тыс. строк. Все было отлично, пока на 10-м файле не возникла ошибка. Алгоритм был следующий:

$xml = file_get_contents( 'xml/hotels_static/' . $_GET[ 'number' ] . '.xml' );
try {
	$xml = new SimpleXMLElement( $xml );
} catch ( Exception $e ) {
	echo $e->getCode() . ': ' . $e->getMessage();
	die;
}

Метод самостоятельно поиска по файлу отпал быстро – не люблю тратить время. Мне подсказали следующий сервис:

Как ни странно обычный элемент textarea принял мои 500 тыс. строк, загрузил их и подсказал линию, содержащую ошибку. Как и предполагалось, XML содержал невалидный элемент:

  • 

Данный элемент не является HTML-сущностью, поэтому и вызывал ошибку.

Tags: ,
Записано в HTML, PHP, Программирование    |    Постоянная ссылка

Делаем умный alt у изображений в Virtuemart 2.0.12f

Ноябрь 14, 2012

Как я отметил, если "Alt текст изображения" в товаре для изображения не задается, то за описание видимо берется имя файла. К примеру:

  • название файла: paljto-s-shirokim-vorotnikom-na-pugovicakh-c02011.jpg
  • атрибут alt: paljto-s-shirokim-vorotnikom-na-pugovicakh-c02011

Идея понятна, таким alt быть не должен. Я считаю, если alt не задан, то он должен быть равным "названию товара + артикул" (у меня на сайте по-умолчанию артикул включен в название товара).

Virtuemart в функции displayMediaThumb() использует следующий алгоритм:

if(empty($this->file_meta)){
	if(!empty($this->file_description)){
		$file_alt = $this->file_description;
	} else if(!empty($this->file_name)) {
		$file_alt = $this->file_name;
	} else {
		$file_alt = '';
	}
} else {
	$file_alt = $this->file_meta;
}

В случае заданного "Alt текст изображения", значение хранится в переменной $this->file_meta. В ином случае в переменную попадает описание (file_description) или название файла (file_name). Я не стал разбираться что есть описание файла, поэтому к делу.

Сделаем пустой alt равным "названию товара + артикул". В примере перезапишем шаблон страницы товара. Точнее его подшаблон для отображения изображений по товару.

Переместим данный файл:

/components/com_virtuemart/views/productdetails/tmpl/default_images.php

в папку с используемым шаблоном:

/templates/kroko/html/com_virtuemart/productdetails/

Открываем файл на редактирование и заменяем:

// Product Main Image
if (!empty($this->product->images[0])) {

на:

// Product Main Image
if (!empty($this->product->images[0])) {
	if ( empty( $this->product->images[0]->file_meta ) ) {
		$this->product->images[0]->file_meta = $this->product->product_name;
	}

Теперь при вызове функции displayMediaThumb() атрибут alt будет равным названию товара (в моем случае включая артикул).

Tags: , ,
Записано в Joomla, PHP, Программирование    |    Постоянная ссылка

Определяем в коде путь до папки с шаблоном в Joomla 2.5.7

Ноябрь 10, 2012

Программно добраться до папки с шаблоном элементарно:

$app = JFactory::getApplication();
$tpl_path = JURI::base() . 'templates/' .$app->getTemplate() . '/';

Tags:
Записано в Joomla, PHP, Программирование    |    Постоянная ссылка

Делаем мета-тег description равным краткому описанию товара в Virtuemart 2.0.12f

Ноябрь 7, 2012

В Virtuemart под Joomla 1.0.15 по-умолчанию на странице подробностей товара "Краткое описание" становилось мета-тегом description. HTML-теги из описания вырезались, как и символ новой строки. В новой версии Virtuemart как видно, мета-тег description = описанию сайта, что неверно. Для того, чтобы повторяющиеся мета-описания не стали ошибками в Веб-мастерах Google и Яндекс необходимо изменить шаблон страницы товара Virtuemart.

Перезапишем следующий файл:

/components/com_virtuemart/views/productdetails/tmpl/default.php

Для этого скопируем данный файл в папку с используемым шаблоном сайта. В моем случае шаблон называется "kroko":

/templates/kroko/html/com_virtuemart/productdetails/default.php

В каждой создаваемой папке также должен быть пустой html-файл "index.html".

Открываем скопированный файл и добавляем сверху:

if ( empty( $this->product->product_s_desc ) == false ) {
	$document->setMetaData( 'description', $this->product->product_s_desc );
}

Все. Теперь достаточно задать для товара "Краткое описание" и проверить исходный код страницы. Должно быть так:

<meta name="description" content="..." />

Кстати "Краткое описание" в самом шаблоне Virtuemart (тот же файл default.php) я удалил, чтобы текст не дублировался.

Tags: , ,
Записано в Joomla, PHP, Программирование    |    Постоянная ссылка

Изменяем форму входа в WordPress

Ноябрь 3, 2012

Решил немного изменить форму авторизации: вставить свой логотип и поменять стандартную ссылку, ведущую на сайт WordPress, на свою.

Изменения минималистичны и затрагивают только файл functions.php в используемой теме. Я добавил 3 новые функции:

/* cay 5 - Start
 * Изменяем вывод формы Входа
 **/
function cay_login_site_url_title() {
	return get_bloginfo( 'title', 'display' );
}
add_filter( 'login_headertitle', 'cay_login_site_url_title' );

function cay_login_site_url() {
	return home_url( '/' );
}
add_filter( 'login_headerurl', 'cay_login_site_url' );

function cay_login_head_part() {
?>
<style type="text/css">
body.login {
	background-color: #FFF;
}
#login {
	padding-top: 71px;
}
.login h1 a {
	background: url( '<?php echo get_bloginfo( 'template_url' ); ?>/images/logo.gif' ) no-repeat 0 0;
	width: 75px;
	height: 110px;
	margin: 0 auto;
}
</style>
<?php
}
add_action( 'login_enqueue_scripts', 'cay_login_head_part' );
/* cay 5 - End */

Форму входа можно посмотреть здесь:

Ссылки по теме

Записано в CSS, PHP, WordPress    |    Постоянная ссылка

Отключение magic quotes gpc через .htaccess

Октябрь 28, 2012

Для установки Joomla 3.0.1 необходимо отключить "magic quotes gpc".

Добавляем в файл .htaccess следующую директиву:

php_flag magic_quotes_gpc off

Tags: ,
Записано в Joomla, PHP    |    Постоянная ссылка

Находим разницу между двумя датами в PHP

Октябрь 21, 2012

Готов уже был переводить даты в int и далее с помощью разницы в секундах и округления находить искомое количество дней. Оказалось, все делается намного проще и с помощью стандартных функций PHP.

Примером применения служит задача по вычислению возраста человека на основе даты рождения и текущего времени. Решается она с помощью класса PHP "The DateTime class" следующим образом:

$date_1 = new DateTime( '1987-10-24' );
$date_2 = new DateTime( 'now' );

$age = $date_1->diff( $date_2 )->y;

После вызова метода diff() возвращается объект класса DateInterval.

Ссылки по теме

Записано в PHP, Программирование    |    Постоянная ссылка

О несовместимости FaceBook кнопки Like и https

Октябрь 21, 2012

После многочисленных и многочасовых испытаниях так и не удалось динамически передавать картинку, заголовок и описание материала в FaceBook. Нет разницы, используется обычный синтаксис или Graph Tags, данные не передаются.

Однако, все правильно, FaceBook пытается считать необходимые данные с самого сайта, а сделать это не может, так как используется протокол https.

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

Отладчик FaceBook Debugger

Несмотря на то, что достигнуть желаемого результата не удалось, я нашел очень удобный сервис, который позволяет понять, какая ошибка допущена при установки кнопки FaceBook на сайт:

Самое интересное, что если в данный отладчик вставить https ссылку, то данные считываются. Далее при нажатии на кнопку Like на сайте, в FaceBook передаются верные значения title, description и image. Но именно для той, что была ранее протестирована в отладчике. При вставке следующей ссылки, данные по предыдущей вновь перестают работать.

Ссылка по теме

Tags: , ,
Записано в PHP    |    Постоянная ссылка