Displaying 91-100 of 276 results.
Resolved: Русский текст в транслит на PHP(Rus to Lat)
posted by admin on December 25, 2015
The last segment is actually the friendly title of the blog article. The problem is when I try to pass that segment to the database, the cyrillic fonts turn into something like %D1%8A%D0%B4%D1%80%D0%BE%D1%81%D1%8 and couldn't match the database record. In the address bar in my browser it looks normal (мъдростта-на-вековете) but if I choose 'copy url location' the last segment again turns into these strange characters.

Please help to convert cyrillic to english letters(lat)Read more
Resolved: Yii DbConnection failed to open the DB connection: invalid data source name
posted by admin on January 22, 2016
DbConnection failed to open the DB connection: invalid data source name error, after uploading project to live. In local host all is right.

// This is the database connection configuration.
return array(
//'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',
// uncomment the following lines to use a MySQL database

'connectionString' => 'abcdefg.mysql.com;dbname=janna',
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
);
Read more
Wiki: Yii 1.1 app db createCommand execution of SQL statement wayswiki
posted by admin on November 7, 2016
Once a database connection is established, SQL statements can be executed using CDbCommand. One creates a CDbCommand instance by calling CDbConnection::createCommand() with the specified SQL statement:

$connection=Yii::app()->db; // assuming you have configured a "db" connection
// If not, you may explicitly create a connection:
// $connection=new CDbConnection($dsn,$username,$password);
$command=$connection->createCommand($sql);
// if needed, the SQL statement may be updated as follows:
// $command->text=$newSQL;

A SQL statement is executed via CDbCommand in one of the following two ways:
  • execute(): performs a non-query SQL statement, such as INSERT, UPDATE and DELETE. If successful, it returns the number of rows that are affected by the execution.
  • query(): performs an SQL statement that returns rows of data, such as SELECT. If successful, it returns a CDbDataReader instance from which one can traverse the resulting rows of data. For convenience, a set of queryXXX() methods are also implemented which directly return the query results.

An exception will be raised if an error occurs during the execution of SQL statements.

$rowCount=$command->execute(); // execute the non-query SQL
$dataReader=$command->query(); // execute a query SQL
$rows=$command->queryAll(); // query and return all rows of result
$row=$command->queryRow(); // query and return the first row of result
$column=$command->queryColumn(); // query and return the first column of result
$value=$command->queryScalar(); // query and return the first field in the first row
//in Russian
$rowCount=$command->execute(); // выполнение запроса типа `INSERT`, `UPDATE` или `DELETE`
$dataReader=$command->query(); // выполнение запроса типа `SELECT`
$rows=$command->queryAll(); // возвращает все строки результата запроса
$row=$command->queryRow(); // возвращает первую строку результата запроса
$column=$command->queryColumn(); // возвращает первый столбец результата запроса
$value=$command->queryScalar(); // возвращает значение первого поля первой строки результата запроса
Read more
Resolved: Yii 1.1 How to get attribute from model attributeLabels function in CDetailView custom field
posted by admin on October 12, 2016
I have this CDetailView

<?php $this->widget('zii.widgets.CDetailView', array(
'data'=>$model,
'attributes'=>array(
'id',
'username',
'personal_email',
'work_email',
array(
'label' => Yii::t('translation', 'Created'),
'type' => 'raw',
'value' => app::datetimeUserFriendly($model->created),
),
'updated',
. . .
),
)); ?>

I want to read label from model attributeLabels.Read more
Wiki: PHP Dominant Colour Function with GD Librarywiki
posted by admin on April 13, 2016
Someone asked if it was possible to find the dominant colour (the more frequent colour, in %) of an image.

So I read about the GD PHP Library, which enables image support. I found the interesting function imageColorAt() which the colour of a specific pixel. Hence, my function consists of resizing to a known size, 100 x 100, then looping into each pixel, storing it’s colour into an array, then sorting the array to find the more frequent key.

Here’s the result :

function getDominantColour($image, $type='jpeg') // $type can be gif, jpeg or png
{
// This function needs GD Library enabled

eval('$source = imagecreatefrom' . $type . '("' . $image . '");'); // we load the source image
$source_x = imagesx($source); // source's X
$source_y = imagesy($source); // source's Y
$resized_x = 100; // resized image's X
$resized_y = 100; // resized image's Y
$resized= imagecreatetruecolor($resized_x, $resized_y); // we create a blank 100 x 100 image
imagecopyresampled($resized, $source, 0, 0, 0, 0, $resized_x, $resized_y, $source_x, $source_y); // We then copy and resized the source image into the blank image

// Required vars declaration
$colours = array();
$rgb = '';
$index = array();
for ($x=0; $x<100; $x++) // We loop into the pixels X
{
for ($y=0; $y<100; $y++) // We loop into the pixels Y
{
$rgb = imagecolorat($resized, $x, $y); // get the RGB of the pixel
$index = imagecolorsforindex($resized, $rgb); // Get the RGB Index
$key = 'R' . $index['red'] . 'G' . $index['green'] . 'B' . $index['blue']; // Put it into a string
if (empty($colours[$key])) // If it's the first time this colour is encountered
{
$colours[$key] = 1; // We give it a value of 1
} else { // If it's not the first time it is encountered
$colours[$key]++; // We increment its value
}
}
}
arsort($colours, SORT_NUMERIC); // We then sort the colours array so that the first one is the most frequent one
return key($colours); // we return the most frequent value
}


Working with images sure is fun. Looking forward to have more functions with the GD libraryRead more
Resolved: Yii Captcha Broken Image
posted by admin on March 12, 2016
The captcha image is broken (no image appearing). The other components of captcha (links, error matching code etc) seem to work correctly

In Controller:

public function actions() {
return array(
'captcha' => array(
'class' => 'CCaptchaAction',
'backColor' => 0xFFFFFF,
),
);
}


In View:

<?php if (CCaptcha::checkRequirements()): ?>
<div class="row">
<?php echo $form->labelEx($model, 'verifyCode'); ?>
<div>
<?php $this->widget('CCaptcha'); ?>
<?php echo $form->textField($model, 'verifyCode'); ?>
</div>
<div class="hint">Please enter the letters as they are shown in the image above.

Letters are not case-sensitive.</div>
<?php echo $form->error($model, 'verifyCode'); ?>
</div>
<?php endif; ?>


In Model:

public $verifyCode;
....
public function rules() {
return array(
....
....
array('verifyCode', 'captcha', 'allowEmpty' => !CCaptcha::checkRequirements()),
);
}


Why I have this problem?Read more
Resolved: Yii check action create and update in view _form
posted by admin on February 2, 2016
I want to check is action create or update and write specific view form row

<?php if (action check syntax here like isUpdate) : ?>
<?php echo $form->labelEx($model,'newpassword'); ?>
<?php echo $form->passwordField($model,'newpassword',array('size'=>55,'maxlength'=>255)); ?>
<?php echo $form->error($model,'newpassword'); ?>
<?php endif; ?>
Read more
Wiki: Yii 1.1: How to work with flash messageswiki
posted by admin on May 22, 2016
Summary
Set your messages in a controller:

Yii::app()->user->setFlash('success', "Data1 saved!");
Yii::app()->user->setFlash('error', "Data2 failed!");
Yii::app()->user->setFlash('notice', "Data3 ignored.");

Display them in your view:

<?php
foreach(Yii::app()->user->getFlashes() as $key => $message) {
echo '<div class="flash-' . $key . '">' . $message . "</div>\n";
}
?>

Setting flash messages
A flash message is used in order to keep a message in session through one or several requests of the same user. By default, it is removed from session after it has been displayed to the user. Flash messages are usually used in combination with HTTP redirections, because in this case there is no view, so messages can only be displayed in the request that follows redirection.

A flash message has a name and a content (AKA key and value). It is an entry of an associative array. The name is a string: often "notice", "success", or "error", but it can be anything. The content is usually a string. You can put HTML tags in your message if you display it raw. You can also set the message value to a number or an array: it will be serialized and kept in session like a string.

Flash messages can be set using the setFlash() Method of CWebUser. For example, if you would like to inform the user that his changes were successfully saved, you could add the following line to your Controller:

<?php
Yii::app()->user->setFlash('success', "Data saved!");
$this->redirect(array('thing/view', 'id' => 1));

In this example we used the key 'success'. If you want to define more than one flash messages, you will have to use different keys.
Displaying flash messages
To check for flash messages we use the hasFlash() Method and to obtain the flash message we use the getFlash() Method. Since Yii v1.1.3, there is also a method getFlashes() to fetch all the messages.

By default, fetching a message deletes it from the session. This means that a message is meant to be displayed only on the first page served to the user. The fetching methods have a boolean parameter that can change this behavior. See the API links in the previous paragraph.

Displaying statically
So showing of the flash message defined above in a view is done by

<?php if(Yii::app()->user->hasFlash('success')):?>
<div class="info">
<?php echo Yii::app()->user->getFlash('success'); ?>
</div>
<?php endif; ?>

These few lines of code will make a flash message with the key "success" visible to the user within a div of class "info". The message will be displayed until this or another page is (re)loaded in the browser.

If you want to always display all the flash messages, then you should add a block to your layout (by default protected/views/layout/main.php). Here is a more elaborate example:

<?php
$flashMessages = Yii::app()->user->getFlashes();
if ($flashMessages) {
echo '<ul class="flashes">';
foreach($flashMessages as $key => $message) {
echo '<li><div class="flash-' . $key . '">' . $message . "</div></li>\n";
}
echo '</ul>';
}
?>

The default CSS created by the Yii script yiic webapp has directives for three classes of flash messages on a div tag: flash-error, flash-notice, flash-success.

The best way to know if some flash messages are set is to check if Yii::app()->user->getFlashes() is empty. Since v1.1.7, Yii keeps an associative array of the flash keys in the form array("key1" => 0, ...), or null if not flash message is set. You can fetch this with Yii::app()->user->getState(CWebUser::FLASH_COUNTERS) but this is not recommended, as Yii could change this internal process.

Displaying dynamically (with Javascript)
If you want the flash message to appear somewhere above the content and then automatically fade out after a few seconds, you will have to add the following lines to your view:

<?php
Yii::app()->clientScript->registerScript(
'myHideEffect',
'$(".info").animate({opacity: 1.0}, 3000).fadeOut("slow");',
CClientScript::POS_READY
);
?>

With these lines of code we register a piece of jQuery (already included with YII) javascript code, using 'myHideEffect' as ID. It will be inserted in the jQuery's ready function (CClientScript::POS_READY). Due to the chainablity of jQuery the little script will run two effects on the .info DIV sequentially:

.animate({opacity: 1.0}, 3000)

Normally this would animate the .info DIV to a full opacity within 3 seconds. But the DIV is already rendered with full opacity upon page load, so calling this effect will just cause a delay for 3 seconds.

.fadeOut("slow")

This is the fadeOut effect which will hide the .info DIV at slow speed.Read more
Wiki: Yii 1.1 Улучшение производительностиwiki
posted by admin on March 24, 2016
Производительность веб-приложения зависит от многих факторов. Главные из них — обращение к базе данных, файловой системе и пропускная способность сети. В Yii, для уменьшения падения производительности из-за самого фреймворка, учтён каждый из этих факторов. Несмотря на это, многие части приложения можно улучшить для получения более высокой производительности.

1. Включение расширения APC
Включение расширения PHP APC — возможно, самый простой способ улучшить общую производительность приложения. Расширение оптимизирует и кэширует промежуточный код PHP и выигрывает время, затрачиваемое на интерпретацию скриптов PHP при каждом запросе.

2. Отключение режима отладки
Отключение режима отладки — ещё один лёгкий способ увеличить производительность. Приложение Yii работает в режиме отладки если константа YII_DEBUG определена как true. Режим отладки полезен при разработке, но не лучшим образом влияет на производительность из-за использования большего числа компонентов. К примеру, при журналировании ошибок, с каждым сообщением может записываться дополнительная информация.

3. Использование yiilite.php
Если используется расширение PHP APC, мы можем заменить yii.php другим загрузчиком — yiilite.php. Это даст приложению ещё больший прирост производительности.

Файл yiilite.php поставляется вместе с каждой версией Yii и представляет собой собранные вместе часто используемые классы. Все комментарии и выражения трассировки вырезаются, поэтому использование yiilite.php уменьшает количество подключаемых файлов и выполняемого кода.

Стоит заметить, что использование yiilite.php без APC может отрицательно повлиять на производительность, так как yiilite.php включает в себя классы, которые могут не требоваться при каждом запросе и отнимать некоторое время на парсинг. Также было отмечено, что на некоторых конфигурациях сервера yiilite.php медленнее даже при использовании APC. Лучший способ принятия решения об использовании yiilite.php — провести тесты на прилагающемся демонстрационном приложении hello world.

4. Использование кэширования
Как уже было описано в разделе «кэширование», Yii предоставляет несколько решений, которые могут значительно увеличить производительность приложения. Если генерация каких-либо данных занимает много времени, мы можем использовать кэширование данных для того, чтобы делать это не так часто. Если часть страницы остаётся неизменной, мы можем использовать кэширование фрагментов. Если вся страница не меняется, можно использовать кэширование страниц.

Если используется Active Record, можно включить кэширование структуры базы данных. Это можно сделать, установив в настройках свойству CDbConnection::schemaCachingDuration значение, большее 0.

Кроме описанных настроек приложения можно использовать кэширование на уровне сервера. Описанное выше кэширование APC относится как раз к ним. Существуют и другие решения, такие как Zend Optimizer, eAccelerator и Squid.

5. Оптимизация базы данных
Получение данных из базы часто является узким местом производительности приложения. Несмотря на то, что кэширование может смягчить потери, оно не решает проблему полностью. Когда в базе содержатся огромные объёмы данных, и нужно обновить кэш, получение данных может быть чрезмерно растратным при неверном составлении схемы данных или запросов.

Будьте осмотрительны при выборе индексов. Их использование может значительно ускорить SELECT-запросы, но замедляет запросы INSERT, UPDATE и DELETE.

Для сложных запросов рекомендуется создать view в базе данных вместо использования запросов из кода PHP, которые СУБД разбирает каждый раз.

Не злоупотребляйте Active Record. Хоть Active Record и является удобной проекцией данных в стиле ООП, но производительность при её использовании, из-за использования объектов для представления каждой строки результата, падает. Для приложений, интенсивно работающих с данными, рекомендуется использовать DAO или API для работы с СУБД на ещё более низком уровне.

Последний по счёту, но не по значению совет: используйте LIMIT в SELECT-запросах. Так вы сможете избежать получение избыточных данных из базы и расхода требующейся для их хранения памяти, выделенной PHP.

6. Минимизация файлов скриптов
Сложные страницы часто включают большое количество внешних файлов JavaScript и CSS. Так как каждый файл равен дополнительному запросу к серверу, мы должны уменьшить число файлов путём их слияния. Также не лишним будет уменьшить размер каждого из них для уменьшения времени передачи по сети. Существует немало инструментов для выполнения этих двух задач.

Для страницы, генерируемой Yii, не исключено, что некоторые скрипты подключаются компонентами, код которых изменять не хочется (например, компоненты ядра Yii). Как минимизировать такие скрипты показано далее.

Для начала опишем, какие файлы минимизировать. Зададим свойство scriptMap компонента clientScript. Это можно сделать как в настройках приложения, так и в коде. К примеру:

$cs=Yii::app()->clientScript;
$cs->scriptMap=array(
'jquery.js'=>'/js/all.js',
'jquery.ajaxqueue.js'=>'/js/all.js',
'jquery.metadata.js'=>'/js/all.js',

);

Приведённый код сделает файлы JavaScript доступными по URL /js/all.js. Если какой-либо из этих файлов требуется для каких-либо компонент, Yii подключит URL (один раз) вместо того, чтобы подключать отдельные файлы.

Нам понадобится использовать какой-либо инструмент для слияния (и, возможно, сжатия) JavaScript в один файл и записать результат в js/all.js.

То же относится и к файлам CSS.

Увеличить скорость загрузки страницы можно также при помощи Google AJAX Libraries API. К примеру, мы можем подключить jquery.js с серверов Google вместо того, чтобы использовать свой сервер. Для того, чтобы это сделать нужно настроить scriptMap следующим образом:

$cs=Yii::app()->clientScript;
$cs->scriptMap=array(
'jquery.js'=>false,
'jquery.ajaxqueue.js'=>false,
'jquery.metadata.js'=>false,

);

Устанавливая значения в false мы запрещаем Yii генерировать код для включения соответствующих файлов. Вместо этого подключим их с серверов Google:

<head>
<?php echo CGoogleApi::init(); ?>

<?php echo CHtml::script(
CGoogleApi::load('jquery','1.3.2') . "\n" .
CGoogleApi::load('jquery.ajaxqueue.js') . "\n" .
CGoogleApi::load('jquery.metadata.js')
); ?>

</head>


7. Использование символьных ссылок для ресурсов
Если ваш проект интенсивно использует ресурсы, то вы можете увеличить его производительность посредством символьных ссылок вместо стандартного копирования файлов. Для того, чтобы включить их вам нужно задать свойство linkAssets компонента приложения assetManager используя конфигурационный файл protected/config/main.php:

return array(
// ...
'components' => array(
// ...
'assetManager' => array(
'linkAssets' => true,
),
),
);

Имейте ввиду, что это потребует дополнительных настроек.Read more
Resolved: How to change css display none or block property using Jquery?
posted by admin on April 12, 2016
DISPLAY BLOCK to NONE
or
DISPLAY NONE to BLOCKRead more