Help Авторизация
  

 
Еще не зарегистрированы?
Забыли пароль?
Добавить в избранное

Статьи

Sf
Symfony
Notation
Официальная документация
Notation
Плагины
Notation
Контроллеры
Notation
Базы данных
Php
PHP
Notation
Базы данных
Js
JavaScript
Notation
Разное
Notation
Prototype
Help Специалисты
Men Жариков Дмитрий
Help Консультации
Consult Весь список
Help Каталог работ
Web Специфичное
Web Брачные агенства
Web Каталоги продукции
Web Интернет-магазины
Web Бизнесс порталы
Web Сайты знакомств
Blognot_big   Блоги
Feed Название
Информация Описание
Npub Nblognot
Записей: 1
Последняя: 18 июля 2010 г.
Npub Nblognot
Записей: 1
Последняя: 19 июля 2010 г.
Npub Nblognot
Записей: 6
Последняя: 26 июля 2010 г.
Npub Nblognot
Записей: 6
Последняя: 21 августа 2010 г.

Приемы работы

FolderFolderPHP
Npub Nblognot
Записей: 2
Последняя: 23 июля 2010 г.

Приемы в PHP

Npub Nblognot
Записей: 2
Последняя: 23 августа 2010 г.

Работа с базой данных с помошью ORM Propel.

Npub Nblognot
Записей: 2
Последняя: 4 сентября 2008 г.
Комментариев: 5
Последний: 13 марта 2010 г.

Методы работы с мультиязычным приложением.

Npub Nblognot
Записей: 3
Последняя: 4 сентября 2008 г.

Техники конфигурирования.

Npub Nblognot
Записей: 2
Последняя: 5 сентября 2008 г.

Юзаем плагин.

Npub Nblognot
Записей: 13
Последняя: 29 июля 2010 г.

Записи по изучению логики работы фреймворка.
Все что накопилось в душе...

Npub Nblognot
Записей: 4
Последняя: 13 января 2009 г.

Приемы и примеры оформления внешнего вида шаблонов в symfony.

Npub Nblognot
Записей: 8
Последняя: 6 сентября 2008 г.
Комментариев: 17290
Последний: 6 июля 2010 г.

Описание процесса разработки этого сайта.
Сдесь буду писать о всех функциональных нововведениях и исправлениях.


Refresh

Найдено (50 результатов )

Поиск в заголовках
Folder  Логика symfony
Ncpanel Nedit Npub Delete
Upload файлов с помощью ajax (js)

Я создал модуль командой symfony init-module backend upload

В apps/backend/modules/upload/actions/action.class.php пишем такой код

class uploadActions extends sfActions
{
  /**
   * Executes index action
   *
   */
public function executeIndex()
{
 // Редирект на 404 если нет параметра claim_id

$this->forward404Unless($this->claim = 
 ClaimPeer::retrieveByPK($this->getRequest()->getParameter('claim_id')));

// Флаг для использования в шаблоне чтоб решить использовать js или нет

$this->isUploaded = false;

// Если пришли с POST

if($this->getRequest()->getMethod() == sfRequest::POST) {
  if($uploaded_file = $this->getRequest()->getFileName('uploaded_file')) {
    if(!empty($uploaded_file)) {
      // очищаем $uploaded_filename 
      $this->getRequest()->moveFile('uploaded_file', './uploads/'   . $this->claim->getClaimId() 
. '/' . $uploaded_file, 0664, true, 0775); 
      $this->uploaded_webpath = $this->claim->getClaimId() . '/' . $uploaded_file;
      $this->isUploaded = true;

      // вставляем запись в таблицу
      $claimdoc = new Claimdocs;
      $claimdoc->setClaimId($this->claim->getClaimId());
      $claimdoc->setFilename($uploaded_file);
      $claimdoc->save();
       }
     }
   }
 }
}

Затем пишем apps/backend/modules/upload/templates/indexSuccess

<?php
use_helper('Upload');

// If we have just uploaded a file then we just run javascript to update the <div>

// Если только что загрузили файл запускаем яваскрипт чтоб обновить див 

if($isUploaded == true) {
    ?>
    <html><head><script>
    var par = window.parent.document;
    var images = par.getElementById('images');
    var imgdiv = images.getElementsByTagName('div')[<?=(int)$_POST['imgnum']?>]; 
// не используем $_POST 
    var image = imgdiv.getElementsByTagName('img')[0];
    imgdiv.removeChild(image);
    var image_new = par.createElement('img');
    image_new.src = '<?=upload_path($uploaded_webpath)?>';
    image_new.className = 'loaded';
    imgdiv.appendChild(image_new);
    </script></head>
    </html>
    <?php
    exit();
}
?><html><head>
<script language="javascript">
function upload(){
    // hide old iframe
    var par = window.parent.document;
    var num = par.getElementsByTagName('iframe').length - 1;
    var iframe = par.getElementsByTagName('iframe')[num];
    iframe.className = 'hidden';

    // create new iframe
    /// Создаем новый фрейм
    var new_iframe = par.createElement('iframe');
    new_iframe.src = '<?=url_for('upload?claim_id='.$claim->getClaimId())?>';
    new_iframe.frameBorder = '0';
    par.getElementById('iframe').appendChild(new_iframe);


    // добавляем картинку индикатора
    var images = par.getElementById('images');
    var new_div = par.createElement('div');
    var new_img = par.createElement('img');
    new_img.src = '<?=image_path('indicator.gif')?>';
    new_img.className = 'load';
    new_div.appendChild(new_img);
    images.appendChild(new_div);

    // отсылаем
    var imgnum = images.getElementsByTagName('div').length - 1;
    document.iform.imgnum.value = imgnum;
    document.iform.submit();
}
</script>
<style>
#file {
    width: 350px;
}
</style>
<head><body><center>
<form name="iform" action="" method="post" enctype="multipart/form-data">
<input id="file" type="file" name="uploaded_file" onchange="upload()" />
<input type="hidden" name="imgnum" />
<input type="hidden" name="claim_id" value="<?=$claim->getClaimId()?>" />
</form>
</center></html>


Теперь мы можем включить этот модуль в другой модуль.
Например в apps/backend/modules/claim/actions/actions.class.php примерно так

public function executeStep2()
{
  // Make sure we have a valid claim_id
  $this->forward404Unless($this->claim = ClaimPeer::retrieveByPK(
$this->getRequest()->getParameter('claim_id')));

  $this->addStylesheet('upload.css');


  // Получаем звязанную запись
  $this->claimdocs = ClaimdocsPeer::getClaimdocs($this->claim->getClaimId());

  return sfView::SUCCESS;
}

Затем в шаблоне apps/backend/modules/claim/templates/step2Success.php

<?php
use_helper('Upload');
?>

<h1>File Upload</h1>

<div id="iframe">
<iframe src="<?=url_for('upload?claim_id='.$claim->getClaimId())?>" frameborder="0"></iframe>
</div>
<div id="images">
<?php foreach($claimdocs as $claimdoc): ?>
  <div><img src="<?=upload_path($claimdoc->getClaimId().'/'.$claimdoc->getFilename())?>"></div>
<?php endforeach ?>
</div>

Here's the 'Upload' helper you see referenced in my code. Put it in apps/backend/lib/helper/UploadHelper.php

Это upload хэлпер, его нужно положить в apps/backend/lib/helper/UploadHelper.php

<?php
use_helper('Asset');

function upload_path($source)
{
  return _compute_public_path($source, 'uploads', false);
}
?>

Comment_big 9 сентября 2008 г.
Folder  Верстка в symfony
Ncpanel Nedit Npub Delete
Вставляем индикатор загрузки формы

Часто при загрузке через форму больших файлов проcят вставить индикатор.
Я его вставляю так в шаблоне:

// вызов ф-ции при submit формы
<?php echo form_tag('Docsfile/save', array(
'multipart' => true,
'onsubmit' =>'upload()' 
)) ?>

сама функция

<script language="javascript">
 function upload(){
   var par = window.parent.document;
   var div = par.getElementById('indic'); 
   div.visibility ="visible";
   div.style.display = "";
  }
</script>

div с картинкой индикатора

<div id="indic" style="display: none">
<?php echo image_tag('/images/indicator.gif') ?> 
<font color="red">Загрузка...</font>
</div>

Comment_big 9 сентября 2008 г.
Folder  Блог сайта
Ncpanel Nedit Npub Delete
Панельки редактирования в блоги

Добавил панельки редактирования в блоги.

в шаблоне проверка на доступность такая

<?php 
if($sf_user->hasCredential('admin') or 
sfContext::getInstance()- >
getUser()->getAttribute( 'user_id', null, 'sfGuardSecurityUser' )==$blog->getUserId() ): 
?>

Comment_big 6 сентября 2008 г.
Folder  Блог сайта
Ncpanel Nedit Npub Delete
Добавил табы в редактирование статей

Разбил на закладки форму редактирования статей


Comment_big 6 сентября 2008 г.
Folder  Логика symfony
Ncpanel Nedit Npub Delete
Аплоад (upload) файлов
if (!$this->getRequest()->hasErrors() && $this->getRequest()->getFileSize('file'))
{
  $currentFile = sfConfig::get('sf_upload_dir')."//".$ans->getFilePath();   
  $fileName = md5($this->getRequest()->getFileName('file').time().rand(0, 99999));
  $ext = $this->getRequest()->getFileExtension('file');
  if (is_file($currentFile))
  {
    unlink($currentFile);
  }
  $this->getRequest()->moveFile('file', sfConfig::get('sf_upload_dir')."//".$fileName.$ext);
  $ans->setFilePath($fileName.$ext);
}

Comment_big 5 сентября 2008 г.
Folder  sfGuardUserPlugin
Ncpanel Nedit Npub Delete
Устраняем баг с "запомнить меня"

Для этого в файле lib/zdOnlineFilter.class.php изменяем:

class zdOnlineFilter extends sfFilter
{ .....

Comment_big 5 сентября 2008 г.
Folder  Мультиязычность в symfony
Ncpanel Nedit Npub Delete
Использование функции __() в action модуле.

При попытке использовать эту ф-цию предварительно не подгрузив хелпер будет ошибка

Fatal error: Call to undefined function __() 

Поэтому нужно подгрузить хэлпер.

sfLoader::loadHelpers('I18N');

И использовать примеро так:

$this->getResponse()->addMeta('title', __('Отзывы работы'));

Comment_big Комментарии (4) Последний: 13 марта 2010 г. 4 сентября 2008 г.
Folder  Конфигурирование symfony
Ncpanel Nedit Npub Delete
Как пробежаться по массиву определенному в app.yml

Я поступаю так:

определяем массив

lang: [ ru_RU, en_US ]

пробегаюсь

 $i = 0;
  while ( sfConfig::get("app_lang_".$i) )
   {
     echo  sfConfig::get("app_lang_".$i);
     $i++;
    }

может кто подскажет более изящный пример


Comment_big 4 сентября 2008 г.
Folder  Prorel & symfony
Ncpanel Nedit Npub Delete
Произвольные сырые запросы
Propel::getConnection()->executeUpdate("TRUNCATE TABLE ".$table);

Propel::getConnection()->executeQuery("TRUNCATE TABLE ".$table);

$connection = Propel::getConnection();
$query = 'SELECT MAX(%s) AS max FROM %s';
$query = sprintf($query, ArticlePeer::CREATED_AT, ArticlePeer::TABLE_NAME);
$statement = $connection->prepareStatement($query);
$resultset = $statement->executeQuery();
$resultset->next();
$max = $resultset->getInt('max');


$crit1=$c->getNewCriterion('subscribe.date_expire', 'TO_DAYS(NOW()) > TO_DAYS(subscribe.date_expire)-6', 
Criteria::CUSTOM);
$crit2=$c->getNewCriterion(SubscribePeer::DATE_EXPIRE, '1999-01-01',Criteria::NOT_EQUAL);

Comment_big 4 сентября 2008 г.
Folder  Логика symfony
Ncpanel Nedit Npub Delete
Фильтр по связанному полю.

Как сделать фильтр в админ модуле по связанному полю.

Я так делаю:

в generator.yml

fields:  
  link_personage:  
    filter_criteria_disabled: true  
filters: [ _link_personage]  

_link_personage.php

<?php if ($type == 'filter'): ?>  
<?php echo input_tag('filters[pers]', isset($filters['pers']) ?
$filters['pers'] : null,
array ('size' => 15)) ?>
<?php else: ?>
<?php echo link_to($forum_message->getPersonage()->getName(),    
'pers/edit?id='.$forum_message->getPersonage()->getId()) ?>
<?php endif ?>

и в actions

protected function addFiltersCriteria($c)  
  {  
    parent::addFiltersCriteria($c);  
    if (isset($this->filters['pers_is_empty']))  
  {  
  $criterion = $c->getNewCriterion(PersonagePeer::NAME, '');  
  $criterion->addOr($c->getNewCriterion(PersonagePeer::NAME, null, Criteria::ISNULL));  
  $c->add($criterion);  
}  
else if (isset($this->filters['pers']) && $this->filters['pers']   !== '')
{    
  $c->add(PersonagePeer::NAME, strtr($this->filters['pers'], '*',   '%'), Criteria::LIKE);  
  $c->addJoin(TeamsPeer::ID, PersonagePeer::ID_TEAM, Criteria::LEFT_JOIN);
}  

}


Comment_big 2 сентября 2008 г.
Folder  Верстка в symfony
Ncpanel Nedit Npub Delete
Раскрашиваем строки таблицы

В админ модулях это реализовано следующим образом:
В шаблоне

<?php   
$n=0;  
foreach($result_blog->getResults() as $blog):   
$odd = fmod(++$n, 2)  
?>  

 <tr class="tbl_td<?php echo $odd ?>">

в стилях соответственно

.tbl_td0  
{  
background: #EFF7FF;    
}  

.tbl_td1  
{  
background: #DFEEFF;    
}  

Comment_big 2 сентября 2008 г.
First Previous 1 2 3 4 5 Next Last